我需要在SQL表中选择一个列到两个包含逗号分隔值的单独字段中 - 一个应该引用,另一个应该不引用。
因此,例如,如果表在单个列中具有值abcde,则我的select SQL语句应返回两个字段 - 一个字段包含值' a'' b' ' C'' d'' E'另一个包含值a,b,c,d,e。
我正在运行以下SQL语句来实现此目的:
SELECT
SUBSTRING((SELECT TOP 100 ''',''' + CAST(sales_id AS NVARCHAR(50))
FROM sales_order_header
WHERE (status = 0)
ORDER BY updated_datetime, 1
FOR XML PATH('')),3,2147483647) + '''' AS quoted,
SUBSTRING((SELECT TOP 100 ',' + CAST(sales_id AS NVARCHAR(50))
FROM sales_order_header
WHERE (status = 0)
ORDER BY updated_datetime, 1
FOR XML PATH('')),2,2147483647) + '' AS unquoted
然而,我有一个场景,其结果为"引用"和"未引用的"虽然我运行相同的" SELECT" SUBSTRING函数中的语句。
达到我想要的最佳方式是什么?
有没有办法编写一个SQL语句,以便它只查询一次表并重新使用两列的结果,而不是运行" SELECT"声明两次。
答案 0 :(得分:0)
通过在CTE或派生表中构建基本查询,可以避免重复复制查询。假设sales_id
是数字,可以通过替换引号来实现从引用版本构建未引用版本:
WITH MyCte(Col) AS
(
SELECT TOP 100 ''',''' + CAST(sales_id AS NVARCHAR(50))
FROM sales_order_header
WHERE (status = 0)
ORDER BY updated_datetime, 1 FOR XML PATH('')
)
SELECT SUBSTRING(Col, 3,2147483647) + '''' AS quoted,
SUBSTRING(Replace(Col, '''', ''),2,2147483647) + '' AS unquoted
FROM MyCte;