在此先感谢您提供的任何帮助。到目前为止,我在这里或其他地方的搜索中找不到像这样的任何内容,但我敢打赌更多的是因为我不知道描述问题/问题的标准方式。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