早上好,
我在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)
答案 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,尤其是当表达式更短时。