sql 用select语句进行行转列

sql 用select语句进行行转列name bb cc dd ee
a1 b1 c1 d1 e1
a2 b2 c2 d2 e2
这样的数据我要转换
name value1 value2
a1 bb b1
a1 cc c1
a1 dd d1
a1 ee e1
a2 bb b2
a2 cc c2
a2 dd d2
a2 ee e2
sql要怎么写,求大神帮帮忙

我们来看看一个小列子。有一个游戏玩家充值表(仅仅为了说明,举的一个小例子),

CREATE TABLE [Inpours]
(
   [ID]                INT IDENTITY(1,1), 
   [UserName]          NVARCHAR(20),  --游戏玩家
    [CreateTime]        DATETIME,      --充值时间    
    [PayType]           NVARCHAR(20),  --充值类型    
    [Money]             DECIMAL,       --充值金额
    [IsSuccess]         BIT,           --是否成功 1表示成功, 0表示失败
    CONSTRAINT [PK_Inpours_ID] PRIMARY KEY(ID)
)
 
INSERT INTO Inpours SELECT '张三', '2010-05-01', '支付宝', 50, 1
 
INSERT INTO Inpours SELECT '张三', '2010-06-14', '支付宝', 50, 1
 
INSERT INTO Inpours SELECT '张三', '2010-06-14', '手机短信', 100, 1
 
INSERT INTO Inpours SELECT '李四', '2010-06-14', '手机短信', 100, 1
 
INSERT INTO Inpours SELECT '李四', '2010-07-14', '支付宝', 100, 1
 
INSERT INTO Inpours SELECT '王五', '2010-07-14', '工商银行卡', 100, 1
 
INSERT INTO Inpours SELECT '赵六', '2010-07-14', '建设银行卡', 100, 1

下面来了一个统计数据的需求,要求按日期、支付方式来统计充值金额信息。这也是一个典型的行转列的例子。我们可以通过下面的脚本来达到目的

SELECT  
        CreateTime, [支付宝] , [手机短信], 
        [工商银行卡] , [建设银行卡] 
FROM 

    SELECT CONVERT(VARCHAR(10), CreateTime, 120) AS CreateTime,PayType, Money 
    FROM Inpours 
) P 
PIVOT ( 
            SUM(Money) 
            FOR PayType IN 
            ([支付宝], [手机短信], [工商银行卡], [建设银行卡]) 
      ) AS T 
ORDER BY CreateTime

温馨提示:答案为网友推荐,仅供参考
第1个回答  2017-10-23
SELECT DISTINCT([科室]) AS [病区],(SELECT COUNT([血型]) FROM TABLENAME WHERE [科室] =A.[科室] AND [血型]='A') AS [A型] ,(SELECT COUNT([血型]) FROM TABLENAME WHERE [科室] =A.[科室] AND [血型]='B') AS [B型] ,(SELECT COUNT([血型]) FROM TABLENAME WHERE [科室] =A.[科室] AND [血型]='AB') AS [AB型] ,(SELECT COUNT([血型]) FROM TABLENAME WHERE [科室] =A.[科室] AND [血型]='O') AS [O型] ,(SELECT COUNT([血型]) FROM TABLENAME WHERE [科室] =A.[科室] ) AS [计] FROM TABLENAME A
第2个回答  2017-10-22
2008以上,使用pivot。2005另外再问吧追问

能举个例子吗 我没用过这个函数

相似回答