我需要获得一行中最高的值以及该列的名称。问题是在一个分区中可能有多个相等的值。因此,我希望得到的结果是在一栏中获得最高的价值,在这种情况下,所有列的名称均以逗号分隔。
这个问题与我以前的问题完全相关:
How to get the highest value in a row together with the column name
让我们使用上一个问题中的Shnugo示例。
DECLARE @tbl TABLE(ID INT IDENTITY,d1 DATE, d2 DATE, d3 DATE);
INSERT INTO @tbl VALUES
('20180101','20180102','20180103') --one max value
,('20170101','20190102','20190102'); --two max values
对于ID = 2,有两个最大值,所以我要完成的是一个带有ID列,max_date列和第三列列名称的表。因此,对于ID = 2,我想获得两列的名称(d2,d3)。
答案 0 :(得分:2)
像这样尝试:
DECLARE @tbl TABLE(ID INT IDENTITY,d1 DATE, d2 DATE, d3 DATE);
INSERT INTO @tbl VALUES
('20180101','20180102','20180103') --one max value
,('20170101','20190102','20190102'); --two max values
WITH cte AS
(
SELECT TOP 1 WITH TIES
t.ID
,y.value('text()[1]','date') d
,y.value('local-name(.)','varchar(100)') c
FROM @tbl t
CROSS APPLY(SELECT d1,d2,d3 FOR XML PATH('d'),TYPE) A(x)
CROSS APPLY x.nodes('/d/*') B(y)
ORDER BY DENSE_RANK() OVER(PARTITION BY ID ORDER BY y.value('text()[1]','date') DESC)
)
SELECT cte1.ID
,cte1.d
,STUFF((SELECT ',' + cte2.c
FROM cte cte2
WHERE cte1.ID=cte2.ID
FOR XML PATH('')),1,1,'') cs
FROM cte cte1
GROUP BY ID,d;
对于SQL Server 2017+,您最好使用STRING_AGG()。
我已经添加了一些说明at the previous answer
答案 1 :(得分:0)
您可以尝试类似的代码来获取信息并将INSERT插入表中。您必须根据需要更新以下powershell -NoP -C "gc '%FileIn%'|?{$_ -notmatch '^([^|]*\|){16}N'}" >"%FileOut%"
逻辑以添加其他条件。
CASE