[英]SQL Group By clause without aggregation
我有一個 web 應用程序,它允許用戶對 select 列進行分組,以及對列進行排序(以及其他選項,例如不同的聚合)。 如果沒有選擇聚合,我很難弄清楚如何為此編寫 SQL。 例如,如果用戶選擇
SELECT * FROM EmployeeWorkLocation GROUP BY Work Location, Department ORDER BY Employee Number
以下 EmployeeWorkLocation 示例表的結果:
員工編號 | 工作地點 | 部 | 客戶編號 |
---|---|---|---|
1 | 達拉斯 | 維護 | 111 |
2 | 休斯頓 | 維護 | 222 |
3 | 達拉斯 | 銷售量 | 111 |
4 | 休斯頓 | 銷售量 | 222 |
5 | 達拉斯 | 維護 | 222 |
6 | 達拉斯 | 銷售量 | 222 |
應該返回以下結果:
員工編號 | 工作地點 | 部 | 客戶編號 |
---|---|---|---|
--工作地點:達拉斯 | |||
-----部門:維修 | |||
1 | 達拉斯 | 維護 | 111 |
5 | 達拉斯 | 維護 | 222 |
-----部門:銷售 | |||
3 | 達拉斯 | 銷售量 | 111 |
6 | 達拉斯 | 銷售量 | 222 |
--工作地點:休斯頓 | |||
-----部門:維修 | |||
2 | 休斯頓 | 維護 | 222 |
-----部門:銷售 | |||
4 | 休斯頓 | 銷售量 | 222 |
我不擔心結果中顯示的標題,因為它們只是用來顯示我希望如何顯示結果。
我意識到這本質上只是一種在沒有任何聚合的情況下發生的排序,但想知道這是否可以使用 GROUP BY 子句來實現,以及 SQL 會是什么樣子。
您可以使用UNION ALL
。
select employee_number, work_location, department, client_number from (
select distinct CONCAT('-- Work Location :', work_location) employee_number,
work_location ord_work_location, '' ord_department, CAST(null AS varchar)
work_location, CAST(null AS varchar) department, CAST(null AS varchar)
client_number, 0 ords from your_table_name
UNION ALL
select distinct CONCAT('---- Department :', department), work_location
ord_work_location, department ord_department, CAST(null AS varchar),
CAST(null AS varchar), CAST(null AS varchar), 1 ords from your_table_name
UNION ALL
select CAST(employee_number AS varchar), work_location, department
ord_department, work_location, department, CAST(client_number AS varchar),
2 ords from your_table_name
)a order by ord_work_location, ord_department, ords
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.