2016-10-03 30 views
1

我有一个表包含如下一些行:打开值代入列名

Sr. Name   Product Qty 
1 Yogesh  ALB   1 
2 Suresh  AMS   2 
3 Yogesh  ALB   2 
4 Mahesh  MAS   5 

现在,我要显示的记录,如下面的风格...

Sr. Name  ALB AMS MAS 
1  Yogesh  3 0 0 
2  Suresh  0 2 0 
3  Mahesh  5 0 0 
+0

你可以发布你尝试过但不工作的代码吗? – Techidiot

+2

你需要列转轴 –

+0

你已经显示ALB Mahesh 5.怎么样? ALB应为0,MAS将为5.请参阅我的回答下面的 –

回答

0

使用

SELECT NAME,ISNULL(ALB,0) AS ALB,ISNULL(AMS,0) AS AMS,ISNULL(MAS,0) AS MAS 
FROM 
(SELECT NAME,PRODUCT,SUM(QTY) QTY FROM TABLENAME 
GROUP BY NAME,PRODUCT) A 
PIVOT(SUM(QTY) FOR PRODUCT IN (ALB,AMS,MAS)) AS PVT 
1
BEGIN TRAN 
CREATE TABLE #temp 
(
    Sr Int NOT null, Name Varchar(255), Product Varchar(255) , Qty numeric 
) 

INSERT INTO #temp 
SELECT 1 ,'Yogesh', 'ALB', 1 UNION All 
Select 2 , 'Suresh','AMS',2 UNION All 
Select 3 , 'Yogesh' , 'ALB',2 UNION All 
Select 4 , 'Mahesh','MAS',5 

SELECT NAME,ISNULL(ALB,0) AS ALB,ISNULL(AMS,0) AS AMS,ISNULL(MAS,0) AS MAS 
FROM (
    SELECT 
     (Name) as Name,left(Product,3)as Product, 
     Isnull(Qty,0) as Qty 
    FROM #temp 
) as s 
PIVOT (SUM(QTY) FOR PRODUCT IN (ALB, AMS, MAS)) AS pvt 
ORDER BY Name 

ROLLBACK TRAN 
1

请尝试下面的查询。

SELECT ROW_NUMBER()OVER(ORDER BY (SELECT 1)) [Sr.],Name,ISNULL(ALB,0) AS ALB,ISNULL(AMS,0) AS AMS,ISNULL(MAS,0) AS MAS 
FROM (
    SELECT Name,Product, 
     ISNULL(Qty,0) as Qty 
    FROM #temp 
) as s 
PIVOT (SUM(QTY) FOR PRODUCT IN (ALB, AMS, MAS)) AS pvt