Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.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 将值转换为列名_Sql_Sql Server_Pivot - Fatal编程技术网

Sql 将值转换为列名

Sql 将值转换为列名,sql,sql-server,pivot,Sql,Sql Server,Pivot,我有一个表,其中包含一些行,如下所示: 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

我有一个表,其中包含一些行,如下所示:

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
使用


尝试下面的查询

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

你能发布你试过但不起作用的代码吗?你需要列数据透视你已经为Mahesh 5显示了ALB。怎样??ALB应为0,MAS应为5。请参考我下面的答案。我想不同产品的数量是不同的。对于动态透视,有很多答案。您使用的是哪种DBMS?
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
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