SQL Server 2014如何从两个表生成单行结果
谁能帮我提个问题吗? 我有2张桌子、物品和仓库: 物品表中有以下记录:SQL Server 2014如何从两个表生成单行结果,sql,sql-server,Sql,Sql Server,谁能帮我提个问题吗? 我有2张桌子、物品和仓库: 物品表中有以下记录: ArticleCode ArticleName A120022 Article1 第二个表包含以下记录: WArticleCode WareHouseNo Quantity A120022 1 18 A120022 2 7 A120022 2 3
ArticleCode ArticleName
A120022 Article1
第二个表包含以下记录:
WArticleCode WareHouseNo Quantity
A120022 1 18
A120022 2 7
A120022 2 3
A120022 2 3
A120022 1 11
A120022 1 22
A120022 3 1
A120022 2 8
A120022 3 9
A120022 3 3
A120022 1 9
我想要达到的是这样的结果:
ArticleCode ArticleName ArtInDISTWareh TotalQua WareHouses
A120022 Article1 3 94 W1-60 ; W2-21 ; W3-13
我提出这个问题:
SELECT a.ArticleCode
,a.ArticleName
,ISNULL(b.WareHouseNo, 1) AS WareHouse
,ISNULL(SUM(b.Quantity),0) AS Quantity
FROM [BazaZaWeb].[dbo].[Articles] a
LEFT OUTER JOIN WareHouse b ON b.WArticleCode = a.ArticleCode COLLATE DATABASE_DEFAULT
GROUP BY a.ArticleCode,a.ArticleName,b.WareHouseNo
这就是结果:
ArticleCode ArticleName WareHouse Quantity
A120022 Article1 1 60
A120022 Article1 2 21
A120022 Article1 3 13
我几乎可以得到我想要的东西,但不能按b.WareHouseNo和使用Distinct进行分组,但我无法计算出如何计算物品存在于ArtInDISTWareh的仓库
提前感谢您的帮助获取ArtInDISTWareh,您只需将以下内容添加到select子句中:
, count(distinct WarehouseNo) ArtInDISTWareh
要获取单个记录中多个仓库的信息,请在sql server stuff上进行google搜索,查找xml路径。就您要查找的具体值而言,您的问题中没有足够的信息可供任何人提供帮助。请尝试以下内容:
declare @Article table (ArticleCode varchar(10), ArticleName varchar(100))
declare @WareHouse table (WArticleCode varchar(10), WareHouseNo int, Quantity int)
insert into @Article
select 'A120022','Article1'
insert into @WareHouse
select 'A120022',1,18 union all
select 'A120022',2, 7 union all
select 'A120022',2, 3 union all
select 'A120022',2, 3 union all
select 'A120022',1,11 union all
select 'A120022',1,22 union all
select 'A120022',3, 1 union all
select 'A120022',2, 8 union all
select 'A120022',3, 9 union all
select 'A120022',3, 3 union all
select 'A120022',1, 9
select WArticleCode, WareHouseNo, (select sum(Quantity) from @WareHouse where WArticleCode = w.WArticleCode) TotalQuantity,
'W' + convert(varchar(10), WareHouseNo) + '-' + convert(varchar(10), sum(Quantity)) Warehouses
into #temp
from @WareHouse w
group by WArticleCode, WareHouseNo
select distinct WArticleCode, TotalQuantity, Stuff(
(SELECT N'; ' + Warehouses FROM #temp where WArticleCode = t.WArticleCode FOR XML PATH(''),TYPE)
.value('text()[1]','nvarchar(max)'),1,2,N'') Warehouses
into #ftemp
from #temp t
select a.ArticleCode, a.ArticleName, isnull(nullif(len(Warehouses) - len(replace(Warehouses, ';', ''))+1, 1),1) ArtInDISTWareh, TotalQuantity, Warehouses
from @Article a
join #ftemp t on WArticleCode = a.ArticleCode
drop table #temp
drop table #ftemp
谢谢。我想你需要一个用户定义的聚合函数,要么你有仓库编号和总和,要么你可以有你的物品的仓库数量,但不能两者都有,但你有行数。预期结果是什么样的?他应该在哪里添加这个,因为它是按文章和仓库分组并加入的?我已经更新了代码,请使用那个…谢谢。