聚合函數可以算 筆數、平均、合計 …等,現在要算家數,所以用 筆數: (SELECT COUNT(*) FROM Vendors) 把供應商所有家數(即筆數)取出, 但條件須關聯: 裡面的供應商類型需與外面的供應商類型一樣: (SELECT COUNT(*) FROM Vendors WHERE TypeNo = VendorType.TypeNo)。
最後為每一查詢欄位給一別名。
MSSQL 語法
SELECT TypeNo AS 類別代號, TypeName AS 類別名稱, (SELECT COUNT(*) FROM Vendors WHERE TypeNo = VendorType.TypeNo) AS 家數FROM VendorTypeORDER BY TypeNo
接著想知道家數的佔比!
(目前家數 / 總家數 ) * 100
目前家數= (SELECT COUNT(*) FROM Vendors WHERE TypeNo = VendorType.TypeNo)
總家數= (SELECT COUNT(*) FROM Vendors)
在增加一個欄位 (),
MSSQL 語法
(SELECT COUNT(*) FROM Vendors WHERE TypeNo = VendorType.TypeNo) / (SELECT COUNT(*) FROM Vendors) * 100
因為 家數、總家數、 (SELECT COUNT(*) FROM Vendors) * 100
都是整數,無法求得結果為小數,所以須轉型態。
SELECT COUNT(*) FROM Vendors WHERE TypeNo = VendorType.TypeNo 改成 CAST((SELECT COUNT(*) FROM Vendors WHERE TypeNo = VendorType.TypeNo) AS DECIMAL)
SELECT COUNT(*) FROM Vendors 改成 CAST((SELECT COUNT(*) FROM Vendors) AS DECIMAL)
完整語法
MSSQL 語法
SELECT TypeNo AS 類別代號, TypeName AS 類別名稱, (SELECT COUNT(*) FROM Vendors WHERE TypeNo = VendorType.TypeNo) AS 家數, (CAST((SELECT COUNT(*) FROM Vendors WHERE TypeNo = VendorType.TypeNo) AS DECIMAL) / CAST((SELECT COUNT(*) FROM Vendors) AS DECIMAL) * 100 ) AS 佔比 FROM VendorTypeORDER BY TypeNo;
【結果】
最後再轉成整數: CAST( □ AS INT)
CAST((SELECT COUNT(*) FROM Vendors WHERE TypeNo = VendorType.TypeNo) AS DECIMAL) / CAST((SELECT COUNT(*) FROM Vendors) AS DECIMAL) * 100
CAST( CAST((SELECT COUNT(*) FROM Vendors WHERE TypeNo = VendorType.TypeNo) AS DECIMAL) / CAST((SELECT COUNT(*) FROM Vendors) AS DECIMAL) * 100 AS INT)
完整語法
MSSQL 語法
SELECTTypeNo AS 類別代號, TypeName AS 類別名稱,(SELECT COUNT(*) FROM Vendors WHERE TypeNo = VendorType.TypeNo) AS 家數, CAST( CAST((SELECT COUNT(*) FROM Vendors WHERE TypeNo = VendorType.TypeNo) AS DECIMAL) / CAST((SELECT COUNT(*) FROM Vendors) AS DECIMAL) * 100 AS DECIMAL) AS 佔比FROM VendorTypeORDER BY TypeNo;
SELECT A.DeptName AS 部門名稱,() AS 加班費FROM Overtimes AS A WHERE YEAR(SheetDate) = 2022GROUP BY A.DeptNameORDER BY A.DeptName
() AS 加班費 => (SELECT SUM(B.Amounts) FROM Overtimes AS B) AS 加班費
加入兩資料表關聯條件: (SELECT SUM(B.Amounts) FROM Overtimes AS B WHERE B.DeptName = A.DeptName) AS 加班費 AND YEAR(SheetDate)=2022
【完整SQL語法】
MSSQL 語法
SELECT A.DeptName AS 部門名稱,(SELECT SUM(B.Amounts) FROM Overtimes AS B WHERE B.DeptName = A.DeptName AND YEAR(SheetDate)=2022) AS 加班費FROM Overtimes AS A WHERE YEAR(SheetDate) = 2022GROUP BY A.DeptNameORDER BY A.DeptName
【結果】
統計 **加班時數Hours ** () AS 加班時數
同理可得:
MSSQL 語法
(SELECT SUM(B.Hours) FROM Overtimes AS B WHERE B.DeptName = A.DeptName AND YEAR(SheetDate)=2022) AS 加班時數
【完整SQL語法】
MSSQL 語法
SELECT A.DeptName AS 部門名稱,(SELECT SUM(B.Amounts) FROM Overtimes AS B WHERE B.DeptName = A.DeptName) AS 加班費,(SELECT SUM(B.Hours) FROM Overtimes AS B WHERE B.DeptName = A.DeptName) AS 加班時數FROM Overtimes AS A WHERE YEAR(SheetDate) = 2022GROUP BY A.DeptNameORDER BY A.DeptName
SELECT A.DeptName AS 部門名稱FROM Overtimes AS AWHERE YEAR(A.SheetDate) BETWEEN 2020 AND 2022 AND MONTH(A.SheetDate) BETWEEN 1 AND 6GROUP BY A.DeptNameORDER BY A.DeptName
SELECT A.DeptName AS 部門名稱,() AS "2020年上半年加班費",() AS "2021年上半年加班費",() AS "2022年上半年加班費",FROM Overtimes AS AWHERE YEAR(A.SheetDate) BETWEEN 2020 AND 2022 AND MONTH(A.SheetDate) BETWEEN 1 AND 6GROUP BY A.DeptNameORDER BY A.DeptName
() AS "2020年上半年加班費" => (SELECT SUM(B.Amounts) FROM Overtimes AS B) AS "2020年上半年加班費"
加入兩資料表關聯條件:
MSSQL 語法
(SELECT SUM(B.Amounts) FROM Overtimes AS B WHERE B.DeptName = A.DeptName) AS "2020年上半年加班費"(SELECT SUM(B.Amounts) FROM Overtimes AS B WHERE B.DeptName = A.DeptName) AS "2021年上半年加班費"(SELECT SUM(B.Amounts) FROM Overtimes AS B WHERE B.DeptName = A.DeptName) AS "2022年上半年加班費"
加入條件: 年度,月份 YEAR(A.SheetDate) BETWEEN 2020 AND 2022 AND MONTH(A.SheetDate) BETWEEN 1 AND 6
MSSQL 語法
(SELECT SUM(B.Amounts) FROM Overtimes AS B WHERE B.DeptName = A.DeptName AND YEAR(A.SheetDate) BETWEEN 2020 AND 2022 AND MONTH(A.SheetDate) BETWEEN 1 AND 6) AS "2020年上半年加班費"(SELECT SUM(B.Amounts) FROM Overtimes AS B WHERE B.DeptName = A.DeptName AND YEAR(A.SheetDate) BETWEEN 2020 AND 2022 AND MONTH(A.SheetDate) BETWEEN 1 AND 6) AS "2021年上半年加班費"(SELECT SUM(B.Amounts) FROM Overtimes AS B WHERE B.DeptName = A.DeptName AND YEAR(A.SheetDate) BETWEEN 2020 AND 2022 AND MONTH(A.SheetDate) BETWEEN 1 AND 6) AS "2022年上半年加班費"
【完整SQL語法】
MSSQL 語法
SELECT P.DeptName AS 部門名稱,(SELECT SUM(A.Amounts) FROM Overtimes AS A WHERE A.DeptName = P.DeptName ANDYEAR(A.SheetDate) = 2020 AND MONTH(A.SheetDate) BETWEEN 1 AND 6) AS '2020年上半年加班費',(SELECT SUM(A.Amounts) FROM Overtimes AS A WHERE A.DeptName = P.DeptName ANDYEAR(A.SheetDate) = 2021 AND MONTH(A.SheetDate) BETWEEN 1 AND 6) AS '2021年上半年加班費',(SELECT SUM(A.Amounts) FROM Overtimes AS A WHERE A.DeptName = P.DeptName ANDYEAR(A.SheetDate) = 2022 AND MONTH(A.SheetDate) BETWEEN 1 AND 6) AS '2022年上半年加班費'FROM Overtimes AS PWHERE YEAR(P.SheetDate) BETWEEN 2020 AND 2022 AND MONTH(P.SheetDate) BETWEEN 1 AND 6GROUP BY P.DeptNameORDER BY P.DeptName