SQL Server导致特定模式

时间:2015-10-08 12:32:07

标签: sql sql-server database sql-server-2008 resultset

目前我收到的格式如下,

**state** **city** 
State1 City1

State1 City2

State1 City3

State2 City4

State2 City5

但我需要以下格式的结果,

**state** **city** 

State1 City1

       City2

       City3

State2 City4

       City5

通过仅使用sql,如何在N no的特定模式中获得结果。列,以便下一行的常用值变为空。

2 个答案:

答案 0 :(得分:2)

您可以在以下内容中使用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

答案 1 :(得分:1)

我不鼓励这样做,因为它是表示层的任务,但如果你坚持,你可以使用下面的代码。

<强> LiveDemo

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新行字符就在那里。