带有 2 个内部联接的 SQL Server 2014 STUFF
Posted
技术标签:
【中文标题】带有 2 个内部联接的 SQL Server 2014 STUFF【英文标题】:SQL Server 2014 STUFF with 2 Inner Join 【发布时间】: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
【问题讨论】:
这能回答你的问题吗? Comma separated results in SQL, string_agg for sql server pre 2017 感谢建议,尝试了建议后,还是不行,可能是因为只有一张表,当我把它和我的数据结合起来时,它不起作用,它显示重复值,第一个建议重复custname 而第二个重复我的项目值而不是添加它 进化!没有人应该使用old style joins。这可能是为什么事情“不起作用”的一个问题,因为您在最外层的查询中交叉连接。更糟糕的是您同时使用了这两种连接样式。不一致的编码风格是个坏习惯。 谢谢你的建议,我也因为我的混乱代码而被责骂..任何了解这个@SMor的指针 【参考方案1】:你似乎想要:
SELECT s.SO_NO AS int, c.Customer_Name,
STUFF( (SELECT DISTINCT ',' + oi.Item_Name
FROM TBL_SO_LIITEM oi
WHERE s.Sales_SO_ID = oi.Sales_So_ID
FOR XML PATH('')), 1, 1,''
) as items
FROM TBL_Sales_SO s JOIN
Tbl_Customer c
ON s.cust_id = c.cust_id
ORDER BY SO_NO;
请注意,这些表只包含一次,无论是在子查询中还是在外部查询中。您的数据的命名约定非常不一致,所以以上是我的最佳猜测。
【讨论】:
感谢您的见解,我认为我还稍微巧妙地编辑了这个问题,只需要为有点重复的线索提供线索 @yosuacahyadi 。 . .运行我的答案中的代码。不是在FROM
子句中使用,
的损坏代码。
啊,是的,from 子句有效,而 stuff 子句缺少一些参数,我将在我的问题中添加完整的代码,再次......谢谢你的洞察力以上是关于带有 2 个内部联接的 SQL Server 2014 STUFF的主要内容,如果未能解决你的问题,请参考以下文章