具有多列的SQL SELECT / CASE查询返回系统错误:& H80040E14(-2147217900)

时间:2015-05-04 15:40:19

标签: sql excel vba select case

早上好,

我在CASE语句中使用SELECT时遇到问题。没有它,代码工作正常,甚至测试出CHARINDEX。我还将代码替换为更简单的CASE语句。

我要做的是SELECT两列,在不同的位置添加一个占位符列,具体取决于a.AH_NAME1是否包含字符串" KGa"。这样做的原因是因为我自动化了一个预先存在的Excel工作表,其中它们具有一列以上的非内部订单的值。这就是'' AS placeholder的用武之地。

我的错误讯息是

  

系统错误:& H80040E14(-2147217900)

strSQL = "SELECT a.ID, a.AH_NAME1, b.FI_PREIS_ME, CASE WHEN CHARINDEX('KGa', a.AH_NAME1) > 0 THEN (b.FI_NETTO, '' AS placeholder, a.DATUM_ERF) ELSE ('' AS placeholder, b.FI_NETTO, a.DATUM_ERF) END AS CHARGEA, CHARGEB, DATUM_ERF "
        strSQL = strSQL & "FROM SYSADM.BW_AUFTR_KOPF a JOIN SYSADM.BW_AUFTR_POS b ON a.ID = b.ID "
        strSQL = strSQL & "WHERE b.PROD_ID = '99999999' "
        strSQL = strSQL & "AND a.STATUS BETWEEN 110 AND 860 "
        strSQL = strSQL & "AND MONTH(a.DATUM_ERF) BETWEEN " & Month(StartofMonth) & " AND " & Month(EndofMonth)
        strSQL = strSQL & "AND YEAR(a.DATUM_ERF) BETWEEN " & Year(StartofMonth) & " AND " & Year(EndofMonth)

1 个答案:

答案 0 :(得分:1)

这是您的select

SELECT a.ID, a.AH_NAME1, b.FI_PREIS_ME,
       (CASE WHEN CHARINDEX('KGa', a.AH_NAME1) > 0
             THEN (b.FI_NETTO, '' AS placeholder, a.DATUM_ERF)
             ELSE ('' AS placeholder, b.FI_NETTO, a.DATUM_ERF)
        END) AS CHARGEA,
       CHARGEB, DATUM_ERF "

抱歉,你不能这样做。我不确定你到底想做什么。但是,如果要返回多个值,则每个值都需要一个单独的表达式。 case是一个表达式,表达式只生成一个值。也许这就是你想要的:

SELECT a.ID, a.AH_NAME1, b.FI_PREIS_ME,
       (CASE WHEN a.AH_NAME1 LIKE '%KGa%' THEN FI_NETTO ELSE ''
        END) as FI_NETTO,
       (CASE WHEN a.AH_NAME1 LIKE '%KGa%' THEN '' ELSE FI_NETTO
        END) as placeholder,
       DATUM_ERF as ChargeA,
       . . .

我将charindex()替换为like只是因为我更喜欢标准SQL,尤其是当表达式更短时。