Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL Server 2014如何从两个表生成单行结果_Sql_Sql Server - Fatal编程技术网

SQL Server 2014如何从两个表生成单行结果

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

谁能帮我提个问题吗? 我有2张桌子、物品和仓库:

物品表中有以下记录:

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

谢谢。

我想你需要一个用户定义的聚合函数,要么你有仓库编号和总和,要么你可以有你的物品的仓库数量,但不能两者都有,但你有行数。预期结果是什么样的?他应该在哪里添加这个,因为它是按文章和仓库分组并加入的?我已经更新了代码,请使用那个…谢谢。