ÐµĹØÏµÔËËã·û PIVOT/UNPIVOT/APPLY
1¡¢PIVOT
PIVOTÔËËã·û½«ÐÐÐýתΪÁУ¬²¢ÇÒ¿ÉÄÜͬʱִÐоۺϡ£Ê¹ÓÃPIVOTÔËËã·ûʱҪעÒâµÄÖØÒªÒ»µãÊÇ£¬ÐèҪΪËüÌṩһ¸ö²éѯ±í´ïʽ£¬±í´ïʽʹÓÃÊÓͼ¡¢ÅÉÉú±í»òÕßÊÇCTEÖ»·µ»ØËù¹Ø×¢µÄÁС£
2¡¢UNPIVOT
UNPIVOTÔËËã·ûÖ´ÐÐÓëPIVOTÔËËã·ûÏà·´µÄ²Ù×÷£»Ëû½«ÁÐÐýתΪÐÐÁË¡£
3¡¢APPLY
APPLY¹ØÏµÔËËã·ûÔÊÐíÄú¶ÔÍⲿ±íµÄÿ¸öÐе÷ÓÃÖ¸¶¨µÄ±íÖµº¯ÊýÒ»´Î¡£Äú¿ÉÒÔÔÚ²éѯµÄfrom×Ó¾äÖÐÖ¸¶¨APPLY£¬Æä·½Ê½ÓëʹÓÃJOIN¹ØÏµÔËËã·ûÀàËÆ¡£APPLY¾ßÓÐÁ½ÖÖÐÎʽ£ºCROSS APPLYºÍOUTER APPLY¡£
ÑÝʾ£º
USE demo
GO
CREATE TABLE orders
(
Customer VARCHAR(10) NOT NULL,
product VARCHAR(20) NOT NULL,
quantity INT NOT NULL
)
GO
INSERT orders VALUES('Mike', 'Bike',3)
INSERT orders VALUES('Mike','Chain',2)
INSERT orders VALUES('Mike','Bike',5)
INSERT orders VALUES('Lisa','Bike',3)
INSERT orders VALUES('Lisa','Chain',3)
INSERT orders VALUES('Lisa','Chain',4)
INSERT orders VALUES('Lisa','Bike',2)
SELECT * from orders
SELECT * from orders
PIVOT (SUM(quantity) FOR product IN ([Bike],[Chain])) AS a
USE demo
GO
CREATE TABLE SALES1
(
[Year] INT,
Quarter CHAR(2),
Amount FLOAT
)
GO
INSERT INTO SALES1 VALUES (2001, 'Q1', 80)
INSERT INTO SALES1 VALUES (2001, 'Q2', 70)
INSERT INTO SALES1 VALUES (2001, 'Q3', 55)
INSERT INTO SALES1 VALUES (2001, 'Q3', 110)
INSERT INTO SALES1 VALUES (2001, 'Q4', 90)
INSERT INTO SALES1 VALUES (2002, 'Q1', 200)
INSERT INTO SALES1 VALUES (2002, 'Q2', 150)
INSERT INTO SALES1 VALUES (2002, 'Q2', 40)
INSERT INTO SALES1 VALUES (2002, 'Q2', 60)
INSERT INTO SALES1 VALUES (2002, 'Q3', 120)
INSERT INTO SALES1 VALUES (2002, 'Q3', 110)
INSERT INTO SALES1 VALUES (2002, 'Q4', 180)
GO
SELECT * from SALES1
PIVOT
(SUM (Amount) --ʹÓÃSUM¾ÛºÏÊýÁ¿ÁÐ
FOR [Quarter] --PIVOT Quarter ÁÐ
IN (Q1, Q2, Q3, Q4)) --ʹÓü¾½Ú
AS P
GO
SELECT * INTO temp1 from orders
PIVOT (sum(quantity) FOR product IN ([Bike],[Chain])) AS a
SELECT * from temp1
SELECT customer, product,quantity
from temp1
UNPIVOT(quantity FOR product IN ([Bike],[Chain])) AS a
----------------
¶ÔÓÚÒ»¸öÊý¾Ý¿âÍêÕû±¸·ÝÀ´Ëµ£¬±¸·ÝµÄËٶȺܴó³Ì¶ÈÉÏÈ¡¾öÓÚÏÂÃæÁ½¸öÒòËØ£º¶Á´ÅÅÌÊý¾Ý¡¢ÈÕÖ¾ÎļþµÄÍÌÍÂÁ¿£¬Ð´´ÅÅÌÊý¾ÝÎļþµÄÍÌÍÂÁ¿¡£
ÏÂͼÊDZ¸·Ý¹ý³ÌÖдÅÅ̵ı仯Çé¿ö£º
¶ÁÍÌÍÂÁ¿
¶ÁÍÌÍÂÁ¿µÄ´óСȡ¾öÓÚ´ÅÅ̶ÁÈ¡Êý¾ÝµÄËÙ¶È£¬¶ø´ÅÅ̶ÁÈ¡µÄËÙ¶ÈÓÖÈ¡¾öÓÚÊý¾ÝÎļþÔÚ´ÅÅÌÖеÄλÖá£Òò´Ë£¬Î»ÓÚ²»Í¬ÅÌ·ûÉϲ»Í¬Êý¾Ý¿âÎļþµÄ¶ÁÈ¡Ë ......
CLR Óû§¶¨Ò庯ÊýÖ»ÊÇÔÚ .NET ³ÌÐò¼¯Öж¨ÒåµÄ¾²Ì¬·½·¨¡£CREATE FUNCTION Óï¾äÒÑÀ©Õ¹ÎªÖ§³Ö´´½¨ CLR
Óû§¶¨Ò庯Êý¡£
1¡¢´´½¨Êý¾Ý¿âÏîÄ¿
¡¡¡¡
2¡¢Ìí¼ÓÓû§¶¨Ò庯Êý
¡¡¡¡
ÒÔÏÂÊÇÑÝʾ´úÂ룺
Code
using
System;
using
System.Data;
using
System.Data.SqlClient;
using
System.Data.Sql ......
TOP ÔöÇ¿¡£¿ÉÒÔÖ¸¶¨Ò»¸öÊý×Ö±í´ïʽ£¬ÒÔ·µ»ØÒªÍ¨¹ý²éѯӰÏìµÄÐÐÊý»ò°Ù·Ö±È£¬»¹¿ÉÒÔ¸ù¾ÝÇé¿öʹÓñäÁ¿»ò×Ó²éѯ¡£
¿ÉÒÔÔÚDELETE¡¢UPDATEºÍINSERT²éѯÖÐʹÓÃTOPÑ¡Ïî¡£
2¡¢¸üºÃµØÌæ»»SET ROWCOUNTÑ¡Ïʹ֮¸üΪÓÐЧ¡£
OUTPUT
1¡¢SQL Server 2005ÒýÈëÒ»¸öеÄOUTPUT×Ӿ䣬ÒÔʹÄú¿ÉÒÔ³åÐÞ¸ÄÓï¾ä(INSERT¡¢UPDATE¡¢DELETE)ÖÐ ......