我需要验证每个订单 是否已被确认。问题是每个订单可以有多个代码。我的查询(利用 CASE
语句)将检查空白字段或带有字符串“None”的字段以验证订单未被确认。它会返回适当的结果,但是多个行(每个可能的响应一次)而我只需要 (1)。
我正在尝试创建一个临时表,它将返回适当的结果并将两个表连接(通过订单唯一 ID)在一起,希望更正多行问题。这是代码:
DROP TABLE staging_TABLE;
CREATE TEMP TABLE staging_TABLE(
ORDERID varchar(256) ,
CODE varchar(256) );
/*Keeping data types consistent with the real table*/
INSERT INTO staging_TABLE
SELECT ORDERID,
CASE CODE
WHEN 'None' THEN 'No'
WHEN '' THEN 'No'
ELSE 'Yes'
END
FROM ORDERS
WHERE UTCDATE > SYSDATE - 10
AND CODE IS NOT NULL;
SELECT R.QUESTION,
R.ORDERNAME,
T.CODE
FROM ORDERS R
INNER JOIN staging_TABLE T
ON R.ORDERID= T.ORDERID
WHERE R.UTCDATE > SYSDATE - 10
AND R.CODE IS NOT NULL
AND R.CATEGORY IS NOT NULL
AND R.UTCDATE IS NOT NULL
GROUP BY
R.ORDER,
T.CODE,
R.ORDERNAME,
R.CODE
ORDER BY
R.ORDERNAME,
R.ORDER;
我这样做正确吗?或者这是正确的方法吗?
最佳答案
Am I doing this correctly? Or is this even the right approach?
没有。您不需要临时表。您的查询可能如下所示:
SELECT question, ordername
, CASE WHEN code IN ('None', '') THEN 'No' ELSE 'Yes' END AS code
FROM orders
WHERE utcdate > sysdate - 10
AND code IS NOT NULL
AND category IS NOT NULL
GROUP BY question, ordername, 3, "order"
ORDER BY ordername, "order";
ORDER
是保留字。除非双引号,否则不能将其用作列名。那里有问题。AND R.UTCDATE IS NOT NULL
是多余的。无论如何它都不能为 NULLWHERE R.UTCDATE > SYSDATE - 10
我的 3
是对 CASE 表达式的位置引用。或者,您可以再次拼写:
GROUP BY
子句中的 ....
GROUP BY question, ordername
, CASE WHEN code IN ('None', '') THEN 'No' ELSE 'Yes' END
, "order"
关于sql - 将临时表连接到实际表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32959243/