2016-10-03 3 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 
Смежные вопросы