想象一下我有兩個表:
表A
| 姓名 | 銷售量 | 部門 |
|---|---|---|
| 戴夫 | 5 | 鞋 |
| 麥克風 | 6 | 服飾 |
| 擔 | 7 | 前端 |
表B
| 姓名 | 銷售量 | 部門 |
|---|---|---|
| 戴夫 | 5 | 鞋 |
| 麥克風 | 12 | 服飾 |
| 擔 | 7 | 前端 |
| 格雷格 | 23 | 鞋 |
| 金 | 15 | 前端 |
我想創建一個按名稱連接表并按表分隔銷售額總和的查詢。我還想過濾我的查詢以在這種情況下通過某些名稱洗掉字串匹配或部分匹配。
我想要的是以下結果
表 C:
| 銷售額 | B 銷售額 |
|---|---|
| 18 | 24 |
我知道我可以使用如下查詢來做到這一點:
SELECT SUM(A.sales) AS 'A Sales Sum', SUM(B.sales) AS 'B sales Sum' FROM A
JOIN B
ON B.names = A.Names
WHERE Names NOT LIKE '%Gregg%' OR NOT LIKE '%Kim%'
問題在于 WHERE 子句似乎不適用,或者適用于錯誤的表。由于 Names 列在兩者之間并不完全匹配,我認為發生的事情是當它們加入“ON B.names = A.Names”時,來自 B 的額外內容被排除在外?當我翻轉事物時,雖然我得到了相同的結果,但沒有應用過濾器。我得到的錯誤結果如下:
表 D:
| 銷售額 | B 銷售額 |
|---|---|
| 18 | 62 |
顯然我在這里有一個語法問題,因為我對 SQL 還很陌生。我錯過了什么?謝謝!
uj5u.com熱心網友回復:
您不需要表的連接或聯合,也不應該這樣做。
分別在每個表中聚合并回傳帶有 2 個子查詢的結果:
SELECT
(SELECT SUM(Sales) FROM A WHERE Names NOT LIKE '%Gregg%' AND Names NOT LIKE '%Kim%') ASalesSum,
(SELECT SUM(Sales) FROM B WHERE Names NOT LIKE '%Gregg%' AND Names NOT LIKE '%Kim%') BSalesSum
uj5u.com熱心網友回復:
我認為你想要一個聯合方法:
SELECT
SUM(CASE WHEN src = 'A' THEN sales ELSE 0 END) AS "A Sales Sum",
SUM(CASE WHEN src = 'B' THEN sales ELSE 0 END) AS "B Sales Sum"
FROM
(
SELECT sales, 'A' AS src FROM A WHERE Names NOT IN ('Gregg', 'Kim')
UNION ALL
SELECT sales, 'B' FROM B WHERE Names NOT IN ('Gregg', 'Kim')
) t;
這是一個演示,顯示上述查詢正在作業。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/365106.html
