【发布时间】:2020-11-20 09:42:38
【问题描述】:
我的问题与Use STUFF with INNER JOIN Query 非常相似,但我一直在尝试如果第一列是varchar 类型怎么办,目前这是我的表。至于注意我使用的是 SQL Server 2014
表客户
Cust_ID | Cust_Name
--------+---------
1 | Name1
2 | Name2
餐桌顺序
Order_ID | Order_NO | Cust_ID
---------+----------+---------
1 | No.001 | 1
2 | No.002 | 2
表格项
Item_ID | Order_ID | Item_Name | Quantity | Price
--------+----------+-----------+----------+-------
1 | 1 | A | 1 | 10
2 | 1 | B | 1 | 20
3 | 1 | C | 1 | 30
4 | 2 | D | 1 | 40
我尝试过的几个查询:
SELECT
TBL_Sales_SO.SO_NO AS int, Tbl_Customer.Customer_Name,
ITEMS = STUFF ((SELECT DISTINCT ',' + TBL_SO_LIITEM.Item_Name
FROM Tbl_Customer
INNER JOIN TBL_Sales_SO ON Tbl_Customer.Com_Customer_ID = TBL_Sales_SO.Com_Customer_ID
INNER JOIN TBL_SO_LIITEM ON TBL_Sales_SO.Sales_SO_ID = TBL_SO_LIITEM.Sales_So_ID
WHERE TBL_Sales_SO.SO_NO = TBL_Sales_SO.Sales_SO_ID
FOR XML PATH('')), 1, 1,'')
FROM
TBL_Sales_SO, Tbl_Customer
ORDER BY
SO_NO
以及我认为几乎命中的查询
SELECT
TBL_Sales_SO.SO_NO, Tbl_Customer.Customer_Name, TBL_SO_LIITEM.Item_Name,
TBL_SO_LIITEM.Quantity, TBL_SO_LIITEM.Price
FROM
((Tbl_Customer
INNER JOIN
TBL_Sales_SO on Tbl_Customer.Com_Customer_ID = TBL_Sales_SO.Com_Customer_ID)
INNER JOIN
TBL_SO_LIITEM on TBL_Sales_SO.Com_Customer_ID = TBL_SO_LIITEM.Sales_So_ID)
在修改第一个代码时给了我一些不同的错误,第二个我只是不确定如何使像我的目标这样的东西成为可能
Order_No | Name | Item_Name | Quantity | Price
no.001 | Name1 | A,B,C | 3 | 60
no.002 | Name2 | D | 1 | 40
更新 按照 Gordon 的回答,我再次修改代码,管理到下表
Order_No| Name | Item_Name
no.001 | Name1 | A,B,C
no.001 | Name2 | D
no.002 | Name2 | D
no.002 | Name1 | A,B,C
以及我使用的查询:
SELECT
s.SO_NO AS int, c.Cust_Name,
ITEMS = STUFF((SELECT DISTINCT ','+ Item_Name
FROM TBL_SO_LIITEM item
INNER JOIN TBL_Sales_SO s ON s.Sales_SO_ID = item.Sales_So_ID
WHERE c.Cust_ID = s.Cust_ID
FOR XML PATH('')), 1, 1, '')
FROM
TBL_Sales_SO s, Tbl_Customer c
WHERE
c.Cust_Name IN ('Name1','Name2')
ORDER BY
SO_NO
【问题讨论】:
-
感谢建议,尝试了建议后,还是不行,可能是因为只有一张表,当我把它和我的数据结合起来时,它不起作用,它显示重复值,第一个建议重复custname 而第二个重复我的项目值而不是添加它
-
进化!没有人应该使用old style joins。这可能是为什么事情“不起作用”的一个问题,因为您在最外层的查询中交叉连接。更糟糕的是您同时使用了这两种连接样式。不一致的编码风格是个坏习惯。
-
谢谢你的建议,我也因为我的混乱代码而被责骂..任何了解这个@SMor的指针
标签: sql sql-server select