在此先感謝您提供的任何幫助。到目前爲止,我在這裏或其他地方的搜索中找不到像這樣的任何內容,但我敢打賭更多的是因爲我不知道描述問題/問題的標準方式。TSQL子查詢正在混淆羣由
我正在建立一個查找代碼從數據駐留在兩個不同的表。我們有菜單項可以與一個或多個選項相關聯。在這種情況下,我們正在處理與一種肉類(選擇)和一種米飯(在同一選擇表中找到的另一種選擇)一起供應的咖喱(物品)。完整的PLU是與2個選擇類別中的每一個的選擇級SKU級聯的項目級SKU。一個完整的PLU的一個例子是:
'CuMaBfWh'
其中「CUMA」是項目水平SKU和「詳細的展望」和「瓦」分別SKU的選擇級別。我能夠在外部查詢中使用子查詢(不喜歡它)來構建PLU。問題是這種方法不允許我正確分組數據。樣本表,查詢,有問題的輸出和正確的輸出。
這些表中給定的採樣數據:
訂票
i_ticket_id 3
TicketItem
i_ticket_item_id i_ticket_id i_menu_item_id dt_when 1 3 1 '02/08/2015 16:42:00' 2 3 1 '02/08/2015 16:42:00' 3 3 1 '02/08/2015 16:42:00' 4 3 1 '02/08/2015 16:42:00'
菜單項
i_menu_item_id s_mi_sku 1 'CuMa'
ChoiceItem
i_choice_item_id i_ticket_item_id i_choice_id 1 1 2 2 1 8 3 2 1 4 2 8 5 3 4 6 4 9
選擇
i_choice_id s_choice_sku 1 'Ch' 2 'Bf' 3 'Po' 4 'To' 5 'St' 6 'Ve' 7 'Sh$' 8 'Wh' 9 'Br' 10 'Fr$' 11 'Nr'
正確的輸出將如下所示:
Date PLU Qty Amount ---- --- --- ------ 02/08/2015 CuMaBfWh 2 19.00 02/08/2015 CuMaChWh 1 9.50 02/08/2015 CuMaToBr 1 9.50
我有問題的查詢:
SELECT CONVERT(VARCHAR(10), ti.dt_when, 101) [Date],
-- Start building the PLU with the sku from the item level
mi.s_mi_sku
-- Continue building the PLU by adding on the choice sku from the chosen meat
+ (SELECT TOP(1) c1.s_choice_sku
FROM Choices c1
INNER JOIN
ChoiceItem ci1 ON ci1.i_choice_id = c1.i_choice_id AND c1.s_choice_sku IN ('Ch', 'Bf', 'Po', 'To', 'St', 'Ve', 'Sh$')
WHERE ci1.i_ticket_item_id = ti.i_ticket_item_id)
-- Complete the PLU by adding on the choice sku from the chosen rice
+ (SELECT TOP(1) c2.s_choice_sku
FROM Choices c2
INNER JOIN
ChoiceItem ci2 ON ci2.i_choice_id = c2.i_choice_id AND c2.s_choice_sku IN ('Wh', 'Br', 'Fr$', 'Nr')
WHERE ci2.i_ticket_item_id = ti.i_ticket_item_id) [PLU],
SUM(ti.f_ticketitem_share_qty) [Qty],
SUM(ti.c_ticketitem_net_price) [Amount]
FROM Ticket t
INNER JOIN
TicketItem ti on t.i_ticket_id = ti.i_ticket_id
INNER JOIN
MenuItem mi on ti.i_menu_item_id = mi.i_menu_item_id
WHERE ti.dt_when >= '2/8/2015 04:00:00' and ti.dt_when <= '2/9/2015 03:59:00' and mi.s_mi_sku = 'CuMa'
GROUP BY mi.s_mi_sku, ti.dt_when, ti.i_ticket_item_id
產生以下問題的輸出:
Date PLU Qty Amount ---- --- --- ------ 02/08/2015 CuMaBfWh 1 9.50 02/08/2015 CuMaChWh 1 9.50 02/08/2015 CuMaToBr 1 9.50 02/08/2015 CuMaBfWh 1 9.50
我一直認爲,這是有必要包括ti.i_ticket_item_id結果在'GROUP BY'條款中,但我無法找到另一種方式來做到這一點。
有什麼想法?所有建設性的意見/批評是讚賞!
謝謝, 大衛
你能改變數據庫設計嗎?如果是,那麼你的問題和解決方案變得更簡單了? – 2015-02-10 05:12:00
不幸的是我無法修改設計。這是第三方POS系統的後端。我正在提取銷售數據以導入庫存/菜單成本計劃。 – David 2015-02-10 05:19:20
在ticket item表中,無論ticket_id是什麼,ticket_item_id在表中都是唯一的嗎?或者每個ticket_id都是唯一的ticket_item_id? – 2015-02-10 05:29:10