2015-11-24 50 views
1

我希望查詢應根據分組排序不返回表的所有行。 我試過GROUP_CONCAT()的MySQL的功能,我也想同樣的結果,但它應該返回爲行,不僅是逗號分隔值..對特定列進行排序/分組,通過SQL查詢重複其所有值

表數據

  
Emp_Id Emp_Name Dept 
1  aa   111 
2  bb   222 
3  cc   333 
4  dd   222 
5  ee   111 
6  ff   333 
7  gg   222 
8  hh   111 
9  ii   333 
10  jj   222 

預期輸出排序結果

  
Emp_Id Emp_Name Dept 
1   aa   111 
2   bb   222 
3   cc   333 
5   ee   111 
4   dd   222 
6   ff   333 
8   hh   111 
7   gg   222 
9   ii   333 
10   jj   222 

查詢結果應該取表的所有行,但排序應當按部門列,這太不GROUPI NG。

請找到規範附加的圖像 -

輸入數據和預期分選結果

enter image description here

在此先感謝..

+0

這將會是好的,爲您展現你目前正在使用的查詢 – Chizzle

+0

你應該在這個問題所有相關細節。外部鏈接有時會失敗。 –

+0

在SQL Server中,我會用ROW_NUMBER()OVER(PARTITION BY ..)結構來解決這個問題。但我不知道MySQL是否支持這一點。 –

回答

1

SQL Fiddle Demo

SELECT * 
FROM 
    (
    SELECT `Emp_Id`, `Emp_Name`, `Dept`, 
      CASE `Dept` 
       WHEN @curDept THEN @curRow := @curRow + 1 
       ELSE @curRow := 1 AND @curDept := Dept 
      END as RANK 
    FROM Table1 
    CROSS JOIN (SELECT @curRow := 0, @curDept := '') r 
    ORDER BY `Dept`, `Emp_Name` 
    ) t 
ORDER BY RANK, `Dept` 

輸出

| Emp_Id | Emp_Name | Dept | RANK | 
|--------|----------|------|------| 
|  1 |  aa | 111 | 1 | 
|  2 |  bb | 222 | 1 | 
|  3 |  cc | 333 | 1 | 
|--------|----------|------|------| 
|  5 |  ee | 111 | 2 | 
|  4 |  dd | 222 | 2 | 
|  6 |  ff | 333 | 2 | 
|--------|----------|------|------| 
|  8 |  hh | 111 | 3 | 
|  7 |  gg | 222 | 3 | 
|  9 |  ii | 333 | 3 | 
|--------|----------|------|------| 
|  10 |  jj | 222 | 4 | 
相關問題