Siw*_*hit 1 sql-server stored-procedures sql-server-2008
在编写此查询时需要您的帮助.
Field 1
========
Hello
Man
Lady
Run Code Online (Sandbox Code Playgroud)
我需要结果:
F1 F2 F3
=================================
Hello Null Null
Man Null Null
Lady Null Null
Hello Man Null
Hello Lady Null
Man Lady Null
Hello Man Lady
==================================
Run Code Online (Sandbox Code Playgroud)
没有其他专栏可以确保Man在Lady之前出现,这是有效的.所以这里的一些排列与你的输出相反
添加另一个值,但它变得复杂
DECLARE @t TABLE (SomeCol varchar(30));
INSERT @t VALUES ('Hello'), ('Man'), ('Lady');
SELECT *
FROM
(
SELECT DISTINCT
t1.SomeCol AS F1,
CASE WHEN t2.SomeCol = t1.SomeCol THEN NULL ELSE t2.SomeCol END AS F2,
CASE WHEN t2.SomeCol = t1.SomeCol OR t3.SomeCol = t1.SomeCol OR t3.SomeCol = t2.SomeCol THEN NULL ELSE t3.SomeCol END AS F3
--,
--CASE WHEN NULLIF(t2.SomeCol, t1.SomeCol) IS NULL THEN NULL ELSE NULLIF(NULLIF(t3.SomeCol, t2.SomeCol), NULLIF(t3.SomeCol, t1.SomeCol)) END AS F3
FROM
@t t1
JOIN
@t t2 ON t1.SomeCol <= t2.SomeCol
JOIN
@t t3 ON t2.SomeCol <= t3.SomeCol
) X
ORDER BY
F3, F2, F1;
Run Code Online (Sandbox Code Playgroud)
与其他一些订购专栏
DECLARE @t TABLE (ID int IDENTITY(1,1), SomeCol varchar(30));
INSERT @t VALUES ('Hello'), ('Man'), ('Lady');
SELECT *
FROM
(
SELECT DISTINCT
t1.SomeCol AS F1,
CASE WHEN t2.SomeCol = t1.SomeCol THEN NULL ELSE t2.SomeCol END AS F2,
CASE WHEN t2.SomeCol = t1.SomeCol OR t3.SomeCol = t1.SomeCol OR t3.SomeCol = t2.SomeCol THEN NULL ELSE t3.SomeCol END AS F3
FROM
@t t1
JOIN
@t t2 ON t1.ID <= t2.ID
JOIN
@t t3 ON t2.ID <= t3.ID
) X
ORDER BY
F3, F2, F1;
Run Code Online (Sandbox Code Playgroud)