2014-09-24 73 views
-4

我有一個表作爲中提到:高級分組在SQL Server

------------------------------- 
EmpID | Name  | Salary 
------------------------------- 
1  | AAA  | 10000 
2  | BBB  | 10000 
3  | CCC  | 15000 
4  | DDD  | 15000 
5  | EEE  | 20000 
-------------------------------- 

我想要一個SQL查詢寫入組表中的值如下所述:

--------------------- 
Salary | Name 
--------------------- 
10000 | AAA 
     | BBB 
15000 | CCC 
     | DDD 
20000 | EEE 
--------------------- 

幫我實現輸出在sql server中使用sql查詢。

+0

它不擅長 – 2014-09-24 12:53:22

+0

向我們展示你嘗試過什麼至今。 – bot 2014-09-24 12:53:37

+9

SQL不是表示層。這通常是一個演示問題。 – 2014-09-24 12:54:22

回答

1

您的請求通常必須在Excel或其他相似的軟件下運行,但...

我效仿GROUP BY行爲,所以你會得到只有行wa GE重視和其他與NULL值相同的工資:

create table salary(empid int, name varchar(10), wage int); 

insert into salary values 
(1, 'AAA', 10000), 
(2, 'BBB', 10000), 
(3, 'CCC', 15000), 
(4, 'DDD', 15000), 
(5, 'EEE', 20000); 

SELECT s1.name, 
CASE 
    WHEN NOT EXISTS(
     SELECT 'X' 
     FROM salary s3 
     WHERE s3.empid < s1.empid 
     AND s3.wage = s1.wage 
    ) 
    THEN 
     (SELECT wage FROM salary s2 
     WHERE s2.name = s1.name) 
    ELSE NULL 
END 
FROM salary s1 
ORDER BY wage 

SELECT得到所有員工,以及有關工資組的第一個員工ID就說明工資別的顯示NULL。

這不是正確的,你想,但它確實相似

SqlFiddle

+0

我喜歡你的「不這樣做,但如果這是你真正想要什麼......「編輯。這使得答案真的更有趣。 +1 – 2014-09-24 13:33:48

+0

@XLAnt謝謝親愛的 – 2014-09-24 13:35:34

+0

謝謝@Joe Taras ..儘管它沒有給出與我預期的相同的輸出,但是我可以用你提到的幾個限制來彌補它(用NULL值).. – Venkatesh 2014-09-25 11:30:29

1

不會做你想要什麼,但你可以列出所有的名字在一列這樣的:

Salary | Name 
--------------------- 
10000 | AAA, BBB 
15000 | CCC, DDD 
20000 | EEE 

下面的查詢,這是基於this answer,應該給上述結果:

SELECT Salary, STUFF((SELECT ', ' + Name FROM Employees a 
WHERE b.Salary = a.Salary FOR XML PATH('')), 1, 1, '') Name 
FROM Employees b 
GROUP BY Salary; 
+0

謝謝@yamny ..我們可以實現你提到的..但我想在不同的行中有薪水不重複在行中的名稱,如我所說.. – Venkatesh 2014-09-25 11:46:13