SQL 特定模式的服务器结果
SQL server result in a particular pattern
目前我得到以下格式的查询结果,
**state** **city**
State1 City1
State1 City2
State1 City3
State2 City4
State2 City5
但我需要以下格式的结果,
**state** **city**
State1 City1
City2
City3
State2 City4
City5
仅使用 sql,如何获得 N 号特定模式的结果。列,以便下一行的公共值变为空。
您可以在以下情况下使用 ROW_NUMBER
:
select case when rn > 1 then '' else [state] end as [State],
city
from(
select [state],
[city],
row_number() over(partition by [state] order by [state]) rn
from YourTable
) x
输出
State city
State1 City1
City2
City3
State2 City4
City5
我不鼓励这样做,因为它是表示层的任务,但如果你坚持可以使用下面的代码。
CREATE TABLE #tab(State NVARCHAR(100), City NVARCHAR(100));
INSERT INTO #tab
VALUES('State1','City1'),
('State1', 'City2'),
('State1', 'City3'),
('State2', 'City4'),
('State2', 'City5');
SELECT DISTINCT
State,
[City] = REPLACE(STUFF((SELECT ',' + t2.City
FROM #tab t2
WHERE t2.State = t.State
ORDER BY t2.City
FOR XML PATH('')),1,1,''), ',', CHAR(10) + CHAR(13))
FROM #TAB t
ORDER BY State;
警告
在演示中,您看不到新行,因为此处不支持它。但是使用您的网格视图,您应该能够在应用程序中看到它。新行是 CHAR(10) + CHAR(13)
.
Proof 换行符在那里。
目前我得到以下格式的查询结果,
**state** **city**
State1 City1
State1 City2
State1 City3
State2 City4
State2 City5
但我需要以下格式的结果,
**state** **city**
State1 City1
City2
City3
State2 City4
City5
仅使用 sql,如何获得 N 号特定模式的结果。列,以便下一行的公共值变为空。
您可以在以下情况下使用 ROW_NUMBER
:
select case when rn > 1 then '' else [state] end as [State],
city
from(
select [state],
[city],
row_number() over(partition by [state] order by [state]) rn
from YourTable
) x
输出
State city
State1 City1
City2
City3
State2 City4
City5
我不鼓励这样做,因为它是表示层的任务,但如果你坚持可以使用下面的代码。
CREATE TABLE #tab(State NVARCHAR(100), City NVARCHAR(100));
INSERT INTO #tab
VALUES('State1','City1'),
('State1', 'City2'),
('State1', 'City3'),
('State2', 'City4'),
('State2', 'City5');
SELECT DISTINCT
State,
[City] = REPLACE(STUFF((SELECT ',' + t2.City
FROM #tab t2
WHERE t2.State = t.State
ORDER BY t2.City
FOR XML PATH('')),1,1,''), ',', CHAR(10) + CHAR(13))
FROM #TAB t
ORDER BY State;
警告
在演示中,您看不到新行,因为此处不支持它。但是使用您的网格视图,您应该能够在应用程序中看到它。新行是 CHAR(10) + CHAR(13)
.
Proof 换行符在那里。