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

早上好,

我在SELECT语句中使用CASE时遇到问题。 没有它的代码工作正常,甚至testing了CHARINDEX工程。 我也替代了更简单的CASE语句的代码。

我想要做的是SELECT两列与一个额外的占位符列在不同的位置取决于如果a.AH_NAME1包含string“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) 

这是你的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 " 

对不起,你不能这样做。 我不确定你正在做什么。 但是,如果你想返回多个值,你需要为每个值单独的expression式。 case是一个expression式,而expression式只产生一个值。 也许这是你想要的:

 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() ,只是因为我更喜欢标准的SQL,特别是当expression式更短时。