[英]Concatenating a column within the same column in SQL Server
嗨,我对串联一个列有疑问。 我有两张桌子。
Table 1: Sales Order-> OrderID, ProductsOnHold (Should list product(s) on hold)
Table 2: Products-> ProductID, OnHold (boolean)
因此,可以保留一个或多个产品的销售订单。
如果订单被保留,我可以显示一种产品,但是如果有更多产品被保留,该怎么办-我又如何显示它们呢? 这是我正在创建的视图。
到目前为止,这是我所做的:
(SELECT ProductName
FROM Products with (NOLOCK)
WHERE (OnHold = 1) AND (EXISTS
(SELECT CASE
WHEN (COUNT(DISTINCT Product)> 1) THEN (Product + ', ' + Product)
ELSE Product END AS ProductName
FROM SalesOrder WITH (NOLOCK)
GROUP BY OrderID ))) AS ProductsOnHold
所需输出:
OrderID | ProductsOnHold
----------------------------------
1 | P1, P2, P7
2 |
3 | P1
4 | P1, P7, P8, P9, P15, P77
我的SQL查询中缺少什么吗?
我的解决方法[不确定我是否很好理解你的问题]
用户功能
create function inonerow (@orderid int)
returns nvarchar(max)
begin
declare @data nvarchar(max)
SELECT @data =coalesce(@data + ',','')+ CONVERT(varchar,prodid) from SalesOrder
inner join product on product.prodid = salesorder.prodid where orderid=@orderid and product.oshold = 1
return @data
end
select distinct orderid, dbo.inonerow(orderid) from salesorder
inner join product on product.prodid = salesorder.prodid
where product.onhold = 1
希望这有效:)
假设您有2个表SalesOrder和Product的ProductID作为“关系”列,则可以联接这2个表,然后使用“ for xml”子句进行转置。
select s1.OrderID,
stuff(
(select ','+p.ProductName as [text()]
from SalesOrder s
join Product p on p.ProductID = s.ProductID and p.OnHold = true
where s.OrderID = s1.OrderID
group by p.ProductName
for xml path (''))
,1,1,'') as ProductsOnHold from SalesOrder s1 group by s1.OrderID
希望这可以帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.