[英]SQL query that returns the value from one column which is duplicated but in other column has 1 null and one value
重要提示:元數據庫 SQL 是只讀的,此元數據庫使用的是 POSTGRESQL。
我需要的查詢是:返回 Shipment 中的所有值,這些值在 shipment col 中具有相同的編號,並且在 col Origin 中具有 1 null 和 1 個值(耦合)。
這是我的桌子:
起源 | 運輸 | 產品 | 數量 |
---|---|---|---|
購買.23 | 裝運.42 | 356 | 2個 |
裝運.42 | 356 | 2個 | |
購買.25 | 裝運.422 | 256 | 4個 |
裝運.422 | 256 | 4個 | |
購買.18 | 裝運.427 | 666 | 4個 |
裝運.427 | 666 | 4個 | |
購買.20 | 裝運.427 | 666 | 3個 |
裝運.427 | 666 | 3個 | |
購買.22 | 裝運.427 | 677 | 4個 |
裝運.427 | 677 | 3個 | |
發貨.9999 | 222 | 9 | |
裝運.427 | 677 | 1個 | |
發貨.9999 | 222 | 9 | |
發貨.1111 | 7 | 11 | |
發貨.1111 | 564 | 6個 | |
裝運.5555 | 756 | 1個 | |
裝運.4444 | 755 | 5個 | |
購買.77 | 裝運.3333 | 751 | 9 |
請注意上表中,Purchase.22 的 Quantity 為 4,並且有兩批貨與 Purchase.22 行相同,數量為 1 和 3,兩者總和為 Purchase.22 行的 4。
查詢應該返回這個:
起源 | 運輸 | 產品 | 數量 |
---|---|---|---|
購買.23 | 裝運.42 | 356 | 2個 |
裝運.42 | 356 | 2個 | |
購買.25 | 裝運.422 | 256 | 4個 |
裝運.422 | 256 | 4個 | |
購買.18 | 裝運.427 | 666 | 4個 |
裝運.427 | 666 | 4個 | |
購買.20 | 裝運.427 | 666 | 3個 |
裝運.427 | 666 | 3個 | |
購買.22 | 裝運.427 | 677 | 4個 |
裝運.427 | 677 | 4個 |
如果可能的話,另一個查詢返回這個,沒有任何一對 Origin null 與 Shipment.xx,Origin Purchase 與 Shipment.xx 的產品:
起源 | 運輸 | 產品 | 數量 |
---|---|---|---|
發貨.9999 | 222 | 9 | |
發貨.9999 | 222 | 9 | |
發貨.1111 | 7 | 11 | |
發貨.1111 | 564 | 6個 | |
裝運.5555 | 756 | 1個 | |
裝運.4444 | 755 | 5個 | |
購買.77 | 裝運.3333 | 751 | 9 |
更多信息,我正在開發一個名為 Metabase 的 BI 工具,我是一名大三學生,一個月前剛開始工作,他們給了我這些事情要做,我正在做的查詢是要知道有多少篇文章我有在ivnentory。 不幸的是,有些文章是重復的,如果它們都是重復的,我可以很容易地將數量除以 2。但我從來都不容易。 我有完全沒有來源的價值和沒有裝運的價值,並且兩者都沒有與具有這兩種價值的其他價值相結合,以及其他一式三份且具有不同數量的產品,因此我不能那么容易地划分它。
我試圖在表中找到其他列的任何模式,但至少在 shipment.out 上沒有任何效果,而在 shipment.out.return 等其他裝運值中,我找到了無需使用 SQL 查詢即可幫助我的模式。
我試圖在表中找到其他列的任何模式,但至少在 shipment.out 上沒有任何效果,而在 shipment.out.return 等其他裝運值中,我找到了無需使用 SQL 查詢即可幫助我的模式。
首先,您需要匯總 <shipment, product> 的數量。
然后你可以select:
過濾掉所有計數小於 1 且 <origin, last origin> 都設置為 null 的行。
在此處查看演示。
如果<shipment, product> 可以有多條記錄並且需要匯總數量,則需要在執行此查詢之前進行匯總。 它看起來像這樣:
WITH cte AS (
SELECT MAX(Origin) AS Origin, Shipment, Product, SUM(Quantity) AS Quantity
FROM tab
GROUP BY COALESCE(Origin, 'NULL'), Shipment, Product
), cte2 AS (
SELECT *,
LAG(Origin) OVER(PARTITION BY Shipment, Product, Quantity ORDER BY Shipment, Origin) AS last_val,
COUNT(*) OVER(PARTITION BY Shipment, Product, Quantity) AS cnt
FROM cte
)
SELECT Origin,
Shipment,
Product,
Quantity
FROM cte2
WHERE COALESCE(Origin, last_val) IS NOT NULL AND cnt > 1
ORDER BY shipment
Output:
起源 | 運輸 | 產品 | 數量 |
---|---|---|---|
購買.23 | 裝運.42 | 356 | 2個 |
null | 裝運.42 | 356 | 2個 |
購買.25 | 裝運.422 | 256 | 4個 |
null | 裝運.422 | 256 | 4個 |
購買.20 | 裝運.427 | 666 | 3個 |
null | 裝運.427 | 666 | 3個 |
購買.18 | 裝運.427 | 666 | 4個 |
null | 裝運.427 | 666 | 4個 |
購買.22 | 裝運.427 | 677 | 4個 |
null | 裝運.427 | 677 | 4個 |
在此處查看演示。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.