我有一张桌子,上面有一些销售员出售的产品。售卖后,不同的销售人员会根据他们的排名以不同的百分比获得同一产品的使用费。同一产品但不同销售人员的所有行都显示在不同的行中,但是如果产品和transactionID相同,我希望在同一行中显示。但是销售人员的姓名和特许权使用费应显示在下面的示例中。我也在动态枢轴和动态交叉表中尝试过,但无法解决。可能是我无法正确使用它。有人可以帮我吗。
我尝试过Dynamic Pivot :(我不想要这样的结果)
TranID Product qty UntPrice TotPrice JOHN LUCY
10011 Laptop 2 75 150 15 7.5
10012 Camara 3 15 45 4.5 2.25
--drop table #Royalty
Create table #Royalty
(
TranID int,
Product char(10),
Qty int,
UntPrice money,
TotPrice money,
SalesPrsn char(10),
[Royalty%] int,
[royalty$] money
)
insert into #Royalty values (10011,'Laptop', 2, 75,150,'JOHN',10,15)
insert into #Royalty values (10012,'Camara', 3, 15,45,'JOHN',10,4.5)
insert into #Royalty values (10011,'Laptop', 2, 75,150,'LUCY',5,7.5)
insert into #Royalty values (10012,'Camara', 3, 15,45,'LUCY',5,2.25)
select * from #Royalty
DECLARE @cols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX);
SET @cols = STUFF((SELECT distinct ',' + QUOTENAME(c.SalesPrsn) FROM #Royalty c FOR XML PATH(''), TYPE ).value('.', 'NVARCHAR(MAX)') ,1,1,'')
set @query = 'SELECT TranID,Product,Qty, untprice, TotPrice, ' + @cols + ' from
(select TranID,Product,Qty, untprice, TotPrice, SalesPrsn, [Royalty$] from #Royalty) x
pivot
(max([Royalty$]) for [SalesPrsn] in (' + @cols + ')) p '
execute(@query)
原始数据:
TranID Product Qty UntPrice TotPrice SalesPrsn Royalty% Royalty$
10011 Laptop 2 75 150 JOHN 10% 15
10012 Camara 3 15 45 JOHN 10% 4.5
10011 Laptop 2 75 150 LUCY 5% 7.5
10012 Camara 3 15 45 LUCY 5% 2.25
预期结果数据:
TranID Product Qty UntPrice TotPrice SalesPrsn Royalty% Royalty$ SalesPrsn Royalty% Royalty$
10011 Laptop 2 75 150 JOHN 10% 15 LUCY 5% 7.5
10012 Camara 3 15 45 JOHN 10% 4.5 LUCY 5% 2.25
使用Dynamic Pivot :(我不想要这样的结果)
TranID Product qty UntPrice TotPrice JOHN LUCY
10011 Laptop 2 75 150 15 7.5
10012 Camara 3 15 45 4.5 2.25
如果有人帮助我,将不胜感激。
答案 0 :(得分:0)
结果中的列名必须唯一,因此您不能为不同的销售人员重复salesPrsn等列。下面的脚本将为您提供预期的结果,但列名前面加上人名。您可以让他们为您想要的名字命名,例如SalesPrsn1,SalesPrn2等。
CREATE OR REPLACE FUNCTION F_CERT.CERT_UPC_COMMON_DESC (UPC NUMERIC(14))
RETURNS INTEGER
LANGUAGE SQL
BEGIN
DECLARE RETVAL INTEGER DEFAULT 0;
IF 1=0 THEN
SET RETVAL = 1;
ELSE
SET RETVAL = 100;
END IF;
RETURN RETVAL;
END @
SELECT F_CERT.CERT_UPC_COMMON_DESC (793936791660) AS C FROM SYSIBM.SYSDUMMY1 @