[T-SQL] PIVOT用法

-- 会员表
CREATE TABLE T_MEMBER (
	MEMBER_ID CHAR(02) PRIMARY KEY,
	MEMBER_NAME VARCHAR(20)
)
-- 商品表
CREATE TABLE T_PRODUCT (
	PRODUCT_ID CHAR(02) PRIMARY KEY,
	PRODUCT_NAME VARCHAR(20)
)
-- 订单表
CREATE TABLE T_ORDER (
	ORDER_ID INT PRIMARY KEY,
	MEMBER_ID CHAR(02),
	PRODUCT_ID CHAR(02),
	QTY INT
)

-- 插入会员信息
INSERT INTO T_MEMBER VALUES ('M1', '张一')
INSERT INTO T_MEMBER VALUES ('M2', '张二')
INSERT INTO T_MEMBER VALUES ('M3', '张三')
INSERT INTO T_MEMBER VALUES ('M4', '张四')
INSERT INTO T_MEMBER VALUES ('M5', '张五')

-- 插入商品信息
INSERT INTO T_PRODUCT VALUES ('P1', '自行车')
INSERT INTO T_PRODUCT VALUES ('P2', '相机')
INSERT INTO T_PRODUCT VALUES ('P3', '笔记本')

-- 插入订单信息
INSERT INTO T_ORDER VALUES (1, 'M1', 'P1', 1)
INSERT INTO T_ORDER VALUES (2, 'M2', 'P2', 2)
INSERT INTO T_ORDER VALUES (3, 'M3', 'P1', 1)
INSERT INTO T_ORDER VALUES (4, 'M3', 'P1', 1)
INSERT INTO T_ORDER VALUES (5, 'M2', 'P3', 1)
INSERT INTO T_ORDER VALUES (6, 'M1', 'P2', 3)
INSERT INTO T_ORDER VALUES (7, 'M3', 'P1', 1)
INSERT INTO T_ORDER VALUES (8, 'M1', 'P1', 2)
INSERT INTO T_ORDER VALUES (9, 'M2', 'P3', 1)
INSERT INTO T_ORDER VALUES (10, 'M1', 'P2', 1)
GO

-- 会员 + 商品 统计
SELECT T2.MEMBER_NAME 会员名称, T3.PRODUCT_NAME 商品名称, SUM(T1.QTY) 数量 
  FROM T_ORDER T1 INNER JOIN T_MEMBER T2 ON T1.MEMBER_ID = T2.MEMBER_ID
                  INNER JOIN T_PRODUCT T3 ON T1.PRODUCT_ID = T3.PRODUCT_ID
GROUP BY T2.MEMBER_NAME, T3.PRODUCT_NAME
       
-- 会员 + 商品种类(行转列) 统计      
-- 商品名称字段中的值转换成字段名称
SELECT * 
  FROM (
	SELECT T2.MEMBER_NAME 会员名称, T3.PRODUCT_NAME 商品名称, SUM(T1.QTY) 数量 
          FROM T_ORDER T1 INNER JOIN T_MEMBER T2 ON T1.MEMBER_ID = T2.MEMBER_ID
                          INNER JOIN T_PRODUCT T3 ON T1.PRODUCT_ID = T3.PRODUCT_ID
      GROUP BY T2.MEMBER_NAME, T3.PRODUCT_NAME) T
PIVOT (SUM(数量) FOR 商品名称 IN([笔记本], [相机], [自行车])) AS PVT

猜你喜欢

转载自seabird1979.iteye.com/blog/2156336
今日推荐