【发布时间】:2020-05-17 07:11:47
【问题描述】:
我有下面的表结构
create TABLE PRODUCTDeatils
(
Product varchar(50),
Date Datetime
)
我想要一个输出,其中我得到具有不同值但按日期排序的逗号分隔列表。
我首先通过以下查询拆分值
SELECT DISTINCT
LTRIM(RTRIM(value)) AS Product, date
INTO #tmp3
FROM PRODUCTDeatils
CROSS APPLY STRING_SPLIT(LTRIM(RTRIM(Product)), ',')
SELECT *
FROM #tmp3
ORDER BY date
然后我使用以下两个查询来实现它但没有成功。
查询 #1:
DECLARE @cols AS NVARCHAR(MAX);
SELECT @COLS = substring(list, 1, LEN(list) - 1)
FROM
(SELECT
list = (SELECT DISTINCT Product + ';'
FROM #tmp3
ORDER BY Product + ';'
FOR XML PATH(''), TYPE).value('.', 'nvarchar(MAX)')) AS T
SELECT @COLS
查询 #2:
SELECT
STUFF((SELECT '; ' + Product
FROM
(SELECT DISTINCT TOP 100
Product,date
FROM #tmp3) x
ORDER BY date
FOR XML PATH('')), 1, 2, '') Text
我想要上面的输出,但 bat 应该只出现一次。
【问题讨论】:
-
而不是 DISTINCT 切换到聚合:
LTRIM(RTRIM(value)) AS Product, MIN(date)在查询 #2。 -
请显示您想要的结果。
标签: sql sql-server csv sql-order-by distinct