簡體   English   中英

SQL Group By 子句沒有聚合

[英]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

SQL 小提琴

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM