Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.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 ,C“感谢您的快速响应我将第二行更改为:,Count(不同的ProductID)作为NROF产品,该产品的退货量为7HM 3倍,这更接近我的期望for@debuggerlikeanother我看到你修改了源数据。如果回扣代码是三个字母,那么我所提出的第一个_Sql_Sql Server 2005_Pivot - Fatal编程技术网

Sql ,C“感谢您的快速响应我将第二行更改为:,Count(不同的ProductID)作为NROF产品,该产品的退货量为7HM 3倍,这更接近我的期望for@debuggerlikeanother我看到你修改了源数据。如果回扣代码是三个字母,那么我所提出的第一个

Sql ,C“感谢您的快速响应我将第二行更改为:,Count(不同的ProductID)作为NROF产品,该产品的退货量为7HM 3倍,这更接近我的期望for@debuggerlikeanother我看到你修改了源数据。如果回扣代码是三个字母,那么我所提出的第一个,sql,sql-server-2005,pivot,Sql,Sql Server 2005,Pivot,,C“感谢您的快速响应我将第二行更改为:,Count(不同的ProductID)作为NROF产品,该产品的退货量为7HM 3倍,这更接近我的期望for@debuggerlikeanother我看到你修改了源数据。如果回扣代码是三个字母,那么我所提出的第一个解决方案显然会起作用。产品名称不是唯一的吗?如果不是,你可以考虑将产品名称和产品名称分组在一起。呃。(后面的选项只是为了在查询中显示).@debuggerlikeanother-此外,如果ProductId是产品表的PK,我将使用它连接到Com


,C“感谢您的快速响应我将第二行更改为:,Count(不同的ProductID)作为NROF产品,该产品的退货量为7HM 3倍,这更接近我的期望for@debuggerlikeanother我看到你修改了源数据。如果回扣代码是三个字母,那么我所提出的第一个解决方案显然会起作用。产品名称不是唯一的吗?如果不是,你可以考虑将产品名称和产品名称分组在一起。呃。(后面的选项只是为了在查询中显示).@debuggerlikeanother-此外,如果ProductId是产品表的PK,我将使用它连接到CombinationRebateCode的子查询,而不是产品名称。我相信您的建议可能是我解决方案的基础。但我不知道如何操作和聚合结果透视表中的数据(例如,如果(sum(AMOUNT)==NULL,然后0,否则sum(AMOUNT))并在选择*,[ABC]+[XYZ]+[LOI]作为编解码器,然后按编解码器分组 ID ProductID Product RebateCode Amount 1 123 7HM ABC 1 2 123 7HM XYZ 2 3 124 7HM ABC 10 4 124 7HM XYZ 20 5 125 7HM ABC 100 6 125 7HM XYZ 200 7 125 7HM CEX 3 8 126 2EA ECU 4 8 127 2EA ECU 40 9 128 2EB FBA 5 9 129 2EB FBA 50 10 130 2EB FBA 500 CREATE TABLE #ProductSales(ID SMALLINT, ProductID int, Product varchar(6), RebateCode varchar(4), Amount int) GO INSERT INTO #ProductSales select 1, 123, '7HM', 'ABC', 1 union all select 2, 123, '7HM', 'XYZ', 2 union all select 3, 124, '7HM', 'ABC', 10 union all select 4, 124, '7HM', 'XYZ', 20 union all select 5, 125, '7HM', 'ABC', 100 union all select 6, 125, '7HM', 'XYZ', 200 union all select 7, 125, '7HM', 'CEX', 3 union all select 8, 126, '2EA', 'ECU', 4 union all select 8, 127, '2EA', 'ECU', 40 union all select 9, 128, '2EB', 'FBA', 5 union all select 9, 129, '2EB', 'FBA', 50 union all select 10, 130,'2EB', 'FBA', 500 GO Product nrOfProducts rebateCodeCombination SumAmount ABC CEX ECU FBA XYZ 7HM 2 ABC, XYZ 33 11 0 0 0 22 7HM 1 ABC, CEX, XYZ 303 100 3 0 0 200 2EB 3 FBA 555 0 0 0 555 0 2EA 2 ECU 44 0 0 44 0 0 .. Select PS.Product , Count(Distinct ProductID) As NrOfProducts , Stuff( ( Select ', ' + PS1.RebateCode From #ProductSales As PS1 Where PS1.Product = PS.Product Order By PS1.RebateCode For Xml Path('') ), 1, 2, '') As ComboRebateCode , Sum(PS.Amount) As Amount , Sum( Case When PS.RebateCode = 'ABC' Then PS.Amount End ) As [ABC] , Sum( Case When PS.RebateCode = 'CEX' Then PS.Amount End ) As [CEX] , Sum( Case When PS.RebateCode = 'ECU' Then PS.Amount End ) As [ECU] , Sum( Case When PS.RebateCode = 'FBA' Then PS.Amount End ) As [FBA] , Sum( Case When PS.RebateCode = 'XYZ' Then PS.Amount End ) As [XYZ] From #ProductSales As PS Group By PS.Product Product NrOfPrd ComboRebateCode Amount ABC CEX ECU FBA XYZ 7HM 3 ABC,[...], XYZ 336 111 3 NULL NULL 222 2EB 3 FBA, FBA, FBA 555 NULL NULL NULL 555 NULL 2EA 2 ECU, ECU 44 NULL NULL 44 NULL NULL 7HM 3 ABC, ABC, ABC, CEX, XYZ, XYZ, XYZ ... instead of 2 results 7HM 2 ABC, XYZ ... 7HM 1 ABC, CEX, XYZ, And currently it concatenates every rebate code: 2EB 3 FBA, FBA, FBA 7HM 2 ABC, ABC, XYZ, XYZ instead of 2EB 3 FBA 7HM 2 ABC, XYZ -- Drop Table #ProductSales IF EXISTS ( SELECT * FROM tempdb.dbo.sysobjects WHERE name LIKE '#ProductSales%') DROP TABLE #ProductSales
Select PS.Product
    , Count(PS.ProductId) As NrOfProducts
    , Stuff(
            (
            Select ', ' + PS1.RebateCode
            From #ProductSales As PS1
            Where PS1.Product = PS.Product
            Order By PS1.RebateCode
            For Xml Path('')
            ), 1, 2, '') As CombinationRebateCode
    , Sum(PS.Amount) As Amount
    , Sum( Case When PS.RebateCode = 'ABC' Then PS.Amount End ) As [ABC]
    , Sum( Case When PS.RebateCode = 'LOI' Then PS.Amount End ) As [LOI]
    , Sum( Case When PS.RebateCode = 'XYZ' Then PS.Amount End ) As [XYZ]
From #ProductSales As PS
Group By PS.Product
select *
from #ProductSales
pivot
(
  sum(Amount)
  for RebateCode in ([ABC],[XYZ],[LOI])
)
as p