Sql-Server
從 SQL 連結表中的條件聚合行
我無法解決給我這些結果的查詢
我有一張表,可以讓我每天使用設備。
dbo.DailyUses
Uses | Date | Device 3 | 2020-3-1 | A2 5 | 2020-3-1 | B3 1 | 2020-3-2 | A2 12 | 2020-3-3 | C4
我有另一個表給了我每個設備可能的錯誤程式碼。
dbo.Code_SKU_Combos
ErrorCode | Device 12.24 | A2 12.25 | A2 12.26 | A2 12.24 | B3 12.26 | B3 12.25 | C4
有了這兩個表,我想知道每個“錯誤程式碼電纜設備”每天使用多少次
範例輸出
Uses | Date | ErrorCode 8 | 2020-3-1 | 12.24 3 | 2020-3-1 | 12.25 8 | 2020-3-1 | 12.26 5 | 2020-3-2 | 12.24 5 | 2020-3-2 | 12.25 5 | 2020-3-2 | 12.26 0 | 2020-3-3 | 12.24 12 | 2020-3-3 | 12.25 0 | 2020-3-3 | 12.26
我正在考慮使用視窗函式或連接,但是這兩個表將使用重複值這一事實讓我在創建分區和分組依據時感到困惑。我覺得我想多了。
我創建了我的日期範圍和錯誤程式碼的交叉表,現在我只需要創建一個 SUM() 函式,它基於從 dbo.Code_Sku_Combos 創建的過濾器查看 dbo.DailyUses
我也在使用 Microsoft SQL
一個可能的解決方案是:
第一個選擇獲取表中存在的日期和錯誤組合的所有組合。
如果您確實想要所有可能的日期,則需要添加另一個創建的表,其中包含所有可能的日期
CREATE TABLE Code_SKU_Combos ([ErrorCode] varchar(5), [Device] varchar(2)) ; INSERT INTO Code_SKU_Combos ([ErrorCode], [Device]) VALUES ('12.24', 'A2'), ('12.25', 'A2'), ('12.26', 'A2'), ('12.24', 'B3'), ('12.26', 'B3'), ('12.25', 'C4') ; GO
CREATE TABLE DailyUses ([Uses] int, [Date] Date, [Device] varchar(2)) ; INSERT INTO DailyUses ([Uses], [Date], [Device]) VALUES (3, '2020-3-1', 'A2'), (5, '2020-3-1', 'B3'), (1, '2020-3-2', 'A2'), (12, '2020-3-3', 'C4') ; GO
SELECT DISTINCT [Date],[ErrorCode] FROM DailyUses CROSS JOIN Code_SKU_Combos GO
日期 | 錯誤程式碼 :--------- | :-------- 2020-03-01 | 12.24 2020-03-01 | 12.25 2020-03-01 | 12.26 2020-03-02 | 12.24 2020-03-02 | 12.25 2020-03-02 | 12.26 2020-03-03 | 12.24 2020-03-03 | 12.25 2020-03-03 | 12.26
SELECT ISNULL (SUM([Uses]),0) AS Uses, DateComp as [Date],[errorcomp] AS ErrorCode FROM (SELECT DISTINCT [Date] as DateComp,[ErrorCode] AS errorcomp FROM DailyUses CROSS JOIN Code_SKU_Combos) t1 LEFT JOIN ( DailyUses d INNER JOIN Code_SKU_Combos c ON d.[Device] = c.[Device]) ON t1.DateComp = d.[Date] AND t1.errorcomp = c.[ErrorCode] GROUP BY [DateComp],[errorcomp] ORDER BY [DateComp],[errorcomp] GO
用途 | 日期 | 錯誤程式碼 ---: | :--------- | :-------- 8 | 2020-03-01 | 12.24 3 | 2020-03-01 | 12.25 8 | 2020-03-01 | 12.26 1 | 2020-03-02 | 12.24 1 | 2020-03-02 | 12.25 1 | 2020-03-02 | 12.26 0 | 2020-03-03 | 12.24 12 | 2020-03-03 | 12.25 0 | 2020-03-03 | 12.26
db<>在這裡擺弄