简体   繁体   English

SQL Server 2014如何从2个表制作单行结果

[英]SQL Server 2014 How to make a single line result from 2 tables

Can anyone please help me with making a query? 任何人都可以帮助我进行查询吗? I have 2 tables, Articles and WareHouse: 我有2张桌子,文章和仓库:

The Article table have this record: Article表具有以下记录:

ArticleCode   ArticleName
  A120022      Article1

The Second Table have this Records: 第二个表具有以下记录:

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

What I'm trying to accomplish is to Have this result: 我想要完成的是获得以下结果:

ArticleCode   ArticleName   ArtInDISTWareh   TotalQua  WareHouses
  A120022       Article1          3            94      W1-60 ; W2-21 ; W3-13

I made this Query: 我做了这个查询:

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

And this is the result: 结果如下:

ArticleCode ArticleName WareHouse   Quantity
  A120022    Article1      1           60
  A120022    Article1      2           21
  A120022    Article1      3           13

I can get almost what I want but not Grouping By b.WareHouseNo and using Distinct, but I cant figure out how to count the Warehouses in which the article exists (ArtInDISTWareh) 我几乎可以得到想要的东西,但不能按b.WareHouseNo进行分组并使用Distinct,但是我无法弄清楚如何计算商品所在的仓库(ArtInDISTWareh)

Thank You in advance for Your help 预先感谢您的帮助

try following: 尝试以下操作:

    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

Thanks. 谢谢。

To get ArtInDISTWareh , all you need to do is add this to your select clause: 要获取ArtInDISTWareh ,只需将其添加到select子句中:

, count(distinct WarehouseNo) ArtInDISTWareh

To get information about more than one warehouse in a single record, do a google search on sql server stuff for xml path . 要在一条记录中获取有关多个仓库的信息,请在sql server stuff for xml path上执行google搜索sql server stuff for xml path As far as the values you are looking for specifically, there is not enough information in your question for anyone to provide assistance. 就您要具体查找的值而言,您的问题中没有足够的信息可让任何人提供帮助。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM