当我使用多个案例时,为什么字段为空?

时间:2014-06-30 13:47:34

标签: sql sql-server sql-server-2005 case-when

我有这个SQL代码:

SELECT (  P1.Name
    + (CASE P1.Vorname WHEN '' THEN '' ELSE ', ' + P1.Vorname END)
    + (CASE (AP1.Postleitzahl + AP1.Ort)
          WHEN '' THEN ''
          ELSE ' - ' + (AP1.Postleitzahl + AP1.Ort)
       END)
    + (CASE (PKT1.Kennung + PKM1.Kennung)
          WHEN ''
          THEN
             ''
          ELSE
               ' - '
             + (CASE PKT1.Kennung
                   WHEN '' THEN ''
                   ELSE 'Tel: ' + PKT1.Kennung
                END)
             + (CASE PKM1.Kennung
                   WHEN '' THEN ''
                   ELSE ' Mobil: ' + PKM1.Kennung
                END)
       END))
      AS [IO1] FROM XYZ

现在,当一个字段未填充时,单元格为空。 当所有内容都填满数据时,单元格就会被填满。

那么代码的问题是什么?

我必须使用MSSQL Server 2005,因此CONCAT或其他任何方法都不起作用。

1 个答案:

答案 0 :(得分:1)

这是您的查询:

SELECT (P1.Name +
        (CASE P1.Vorname WHEN '' THEN '' ELSE ', ' + P1.Vorname END) +
        (CASE (AP1.Postleitzahl + AP1.Ort) WHEN '' THEN '' ELSE ' - ' + (AP1.Postleitzahl + AP1.Ort) END) + 
        (CASE (PKT1.Kennung + PKM1.Kennung) WHEN '' THEN '' ELSE ' - ' + (CASE PKT1.Kennung WHEN '' THEN '' ELSE 'Tel: ' + PKT1.Kennung END) +
        (CASE PKM1.Kennung WHEN '' THEN '' ELSE ' Mobil: ' + PKM1.Kennung END) END)
       ) AS [IO1]
FROM XYZ;

如果任何参数为NULL,它将产生NULL。据推测,一列或多列是NULL。您可以通过在coalesce()中包装和/或更改case语句来解决此问题。例如:

SELECT (coalesce(P1.Name, '') +
        (CASE WHEN P1.Vorname = '' or P1.Vorname is null THEN '' ELSE ', ' + P1.Vorname END) +
        (CASE WHEN (AP1.Postleitzahl + AP1.Ort) = '' or (AP1.Postleitzahl + AP1.Ort) is null THEN '' ELSE ' - ' + (AP1.Postleitzahl + AP1.Ort) END) + 
        (CASE WHEN (PKT1.Kennung + PKM1.Kennung) = '' or (PKT1.Kennung + PKM1.Kennung)  is null THEN '' ELSE ' - ' + (CASE WHEN PKT1.Kennung = '' or PKT1.Kennung  is null THEN '' ELSE 'Tel: ' + PKT1.Kennung END) +
        (CASE WHEN PKM1.Kennung  = '' or PKM1.Kennung is null THEN '' ELSE ' Mobil: ' + PKM1.Kennung END) END)
       ) AS [IO1]
FROM XYZ;