PIVOT ¿¬»êÀÚ´Â ÇàÀ¸·Î ³ª¿µÇ¾î ÀÖ´Â µ¥ÀÌÅ͸¦ ¿·Î ³ª¿ÇÏ¿© º¸±â
½±°Ô °¡°øÇÑ´Ù. ½Ã°£¼øÀ¸·Î Â÷°îÂ÷°î ½×ÀÌ´Â °ªÀ̳ª ´ë±Ô¸ð ÀοøÀÇ Á¤º¸´Â ¼¼·Î·Î ±æ¾î ÇÑ´«¿¡ ¾Ë¾Æº¸±â
¾î·Æ´Ù. ½ºÅ©·ÑÇØ °¡¸ç ºÁ¾ß ÇÒ Á¤µµ·Î ¾çÀÌ ¸¹À¸¸é µ¿½Ã¿¡ µÎ °ªÀ» ºñ±³Çϱ⵵ ¾î·Æ´Ù. ÇǺ¿Àº ¼¼·ÎÇàÀ» °¡·Î¿·Î ȸÀü½ÃÄÑ °¡µ¶¼ºÀ» Çâ»ó½ÃŲ´Ù.
¿øº» Å×ÀÌºí¿¡¼ ƯÁ¤ ÇʵåÀÇ °ªÀ̾ú´ø 1¿ù, 2¿ù, 3¿ùÀÌ ÇǺ¿ Å×ÀÌºí¿¡´Â º°µµÀÇ ¿·Î ³ªÅ¸³´Ù. »Ó¸¸ ¾Æ´Ï¶ó 3¿ùó·³ Áߺ¹µÈ µ¥ÀÌÅÍ´Â Çϳª·Î ÇÕÃÄ Áý°èÇØ ÁØ´Ù. ÀÌ·± µ¿ÀÛÀÌ °¡´ÉÇÏ·Á¸é ȸÀüÇÒ Çʵå, °ªÀÇ Á¾·ù, Áߺ¹½Ã Áý°è ¹æ¹ý µîÀÇ »ó¼¼ÇÑ ÁöÁ¤ÀÌ ÇÊ¿äÇÏ´Ù.
PIVOTÀº ±¸¹®ÀÌ º¹ÀâÇÏ°í ȸÀü °á°ú°¡ Á÷°üÀûÀÌÁö ¾Ê¾Æ °á°ú¸¦ ºÁµµ
µ¿ÀÛÀ» ÀÌÇØÇϱ⠽±Áö ¾Ê´Ù. ¹Ýµå½Ã ½Ç½ÀÀ» ÅëÇØ ½ÇÇà °úÁ¤À» ºÐ¼®ÇÏ°í ¿¬±¸ÇØ ºÁ¾ß ÇÑ´Ù. ÀÌ·± ±â´ÉÀÌ ¿Ö ÇÊ¿äÇÏ°í ¾î¶² À¯¿ë¼ºÀÌ ÀÖ´ÂÁö ´Ü¼øÇÑ Å×À̺íºÎÅÍ ´Ü°èÀûÀ¸·Î ½ÇÇàÇØ º¸ÀÚ.
CREATE TABLE tSeason
(
item
VARCHAR(10),
season
VARCHAR(10),
sale
INT
);
INSERT INTO tSeason VALUES ('³Ã¸é', 'º½', 20);
INSERT INTO tSeason VALUES ('³Ã¸é', '¿©¸§', 50);
INSERT INTO tSeason VALUES ('³Ã¸é', '°¡À»', 30);
INSERT INTO tSeason VALUES ('³Ã¸é', '°Ü¿ï', 10);
INSERT INTO tSeason VALUES ('«»Í', 'º½', 30);
INSERT INTO tSeason VALUES ('«»Í', '¿©¸§', 10);
INSERT INTO tSeason VALUES ('«»Í', '°¡À»', 20);
INSERT INTO tSeason VALUES ('«»Í', '°Ü¿ï', 40);
µÎ °³ÀÇ »óÇ°¿¡ ´ëÇØ °èÀýº° ÆǸŷ®À» ±â·ÏÇÑ Å×À̺íÀÌ´Ù. ÆǸŷ®ÀÌ
¼öÁ÷À¸·Î ³ª¿µÇ¾î ÀÖ¾î ÇÑ´«¿¡ º¸ÀÌÁö ¾Ê°í »óÇ°°£À̳ª °èÀýº° ºñ±³°¡ ½±Áö ¾Ê´Ù. ¿©¸§Ã¶ ³Ã¸é°ú «»ÍÀÇ
¸ÅÃâÀ» ºñ±³ÇÏ·Á¸é ¾Æ·¡ À§·Î ½Ã¼±À» ¿Å°Ü °¡¸ç ºÁ¾ß ÇÑ´Ù. »óÇ°ÀÌ 10°³
Á¤µµ µÇ°í °èÀýº°ÀÌ ¾Æ´Ñ ¿ùº°·Î ÆǸŷ®À» ±â·ÏÇØ ³õ¾Ò´Ù¸é À°¾ÈÀ¸·Î ÆľÇÇϱ⠽±Áö ¾Ê´Ù.
¼¼·Î Ãà¿¡ »óÇ°À» Àû°í °¡·Î Ãà¿¡ °èÀýÀ» ÀûÀº ÈÄ µÎ ÃàÀÌ ¸¸³ª´Â Ä¿¡ ÆǸŷ®À» Àû¾î °£·«ÇÑ Ç¥ ÇüÅ·Π°¡°øÇϸé
´«¿¡ ½ï µé¾î¿Â´Ù. ÀÌ·± ½ÄÀ¸·Î µ¥ÀÌÅÍÀÇ ÇüŸ¦ º¯ÇüÇÏ´Â ¸í·ÉÀÌ PIVOTÀÌ´Ù. Àüü Çü½ÄÀº ±²ÀåÈ÷ º¹ÀâÇÏÁö¸¸ °£´ÜÇÏ°Ô ¿ä¾àÇÏ¸é ´ÙÀ½°ú °°´Ù.
SELECT Çʵå¸ñ·Ï FROM Å×À̺í
PIVOT(Áý°èÇÔ¼ö FOR ´ë»óÇʵå
IN (Çʵ尪 ¸ñ·Ï)) º°¸í
´ë»ó ÇʵåÀÇ °ª ¸ñ·ÏÀ» »õ·Î¿î ¿·Î ¸¸µé°í °¢ ¿¿¡ ´ëÇØ Áý°è ÇÔ¼ö¸¦ È£ÃâÇÏ¿© °á°ú¼ÂÀ» ¸¸µç´Ù. ½ÇÁ¦ µ¿ÀÛÀ» º¸±â Àü¿¡´Â ÀÌÇØÇϱ⠽±Áö ¾ÊÀºµ¥ ´ÙÀ½ Äõ¸®¸¦ ½ÇÇàÇØ º¸ÀÚ.
SELECT * FROM tSeason
PIVOT (MAX(sale) FOR season IN ('º½', '¿©¸§', '°¡À»', '°Ü¿ï'));
tSeason Å×À̺íÀÇ season
¿¿¡ ÀÖ´Â º½, ¿©¸§, °¡À», °Ü¿ï °èÀý¸íÀ» °¢°¢ÀÇ ¿·Î ¸¸µé¾î °¡·Î·Î ³ª¿ÇÏ°í »óÇ°º° ÆǸŷ®À» MAX Áý°è
ÇÔ¼ö·Î ±¸ÇØ ±× ¿ÀÇ °ªÀ¸·Î Ãâ·ÂÇÑ´Ù. °èÀýÀÌ »õ·Î¿î Çʵ尡 µÇ´Âµ¥ ÇѱÛÀ» Çʵå¸íÀ¸·Î ¾µ ¼ö ¾ø¾î Çʵ尪À»
µû¿ÈÇ¥·Î °¨½Î¾ß ÇÑ´Ù.
°èÀýº° ÆǸŷ®À» ÇÑ´«¿¡ ¾Ë¾Æº¼ ¼ö ÀÖ°í »óÇ° °£ÀÇ ºñ±³µµ ½±´Ù. ¼¼·Î·Î
³ª¿µÈ 4°èÀýÀ» °¡·Î·Î µ¹·Á 2ÇàÀ¸·Î ¾ÐÃàÇßÁö¸¸ °ªÀº ¿©ÀüÈ÷
2Çà 4¿·Î 8°³ÀÌ´Ù. À§Ä¡¸¸ ¹Ù²î¾úÀ» »Ó ³»¿ëÀº º¯ÇÔ¾øÀ¸¸ç ¶È°°Àº µ¥ÀÌÅ͸¦ º¸±â ÁÁ°Ô °¡°øÇÑ´Ù. ±¸¹®ÀÌ
Á¶±Ý º¹ÀâÇѵ¥ ±×¸²À¸·Î Ç®¾î º¸¸é ´ÙÀ½°ú °°´Ù.
¿øº» Å×À̺íÀÇ season ¿¿¡ º½,
¿©¸§, °¡À», °Ü¿ï µîÀÇ °ªÀÌ µé¾î ÀÖ´Ù. ÀÌ °¢°¢ÀÇ °ªÀ» »õ·Î¿î ¿·Î Á¤ÀÇÇÏ°í °¢ ¿¿¡´Â sale¿ÀÇ ÃÖ´ë°ªÀ»
±¸ÇØ Ç¥½ÃÇÑ´Ù. season ¿ÀÇ ¼¼·Î¿¡ ÀÖ´ø °èÀý¸íÀÌ °¡·Î ÇàÀ¸·Î ȸÀüÇÏ¿© °¢°¢ÀÇ ¿ÀÌ µÈ´Ù.
IN Àý¿¡ ¸ðµç Çʵ尪À» ´Ù ³ª¿ÇØ¾ß ÇÏ´Â °ÍÀº ¾Æ´Ï´Ù. ȸÀü½Ãų °ª¸¸ ³ª¿ÇÏ¸é ³ª¸ÓÁö´Â ÇǺ¿ ´ë»ó¿¡¼ Á¦¿ÜÇÏ¸ç ¼ø¼µµ ¸¶À½´ë·Î º¯°æÇÒ ¼ö ÀÖ´Ù. °èÀýº° ÆǸŷ®¿¡¼ °Ü¿ïÀ» »© º¸°í ¼ø¼µµ ¹Ù²ã º¸ÀÚ.
SELECT * FROM tSeason
PIVOT (MAX(sale) FOR season IN ('¿©¸§', 'º½', '°¡À»'));
¿©¸§, º½, °¡À»¿¡ ´ëÇÑ
ÆǸŷ®¸¸ ³ªÅ¸³ª¸ç °Ü¿ïÀº Åë°è¿¡¼ Á¦¿ÜÇÑ´Ù. ´ë»ó Çʵå¿Í °ª ¸ñ·ÏÀ» º¯°æÇÏ¸é ´Ù¸¥ ¹æ½ÄÀ¸·Î ȸÀüÇÒ ¼öµµ
ÀÖ´Ù. °èÀý¸íÀ¸·Î ÇǺ¿ÇÏ´Â ´ë½Å »óÇ°¸íÀ¸·Î ÇǺ¿ÇØ º¸ÀÚ. FORÀÇ
Ä÷³¸íÀ» itemÀ¸·Î º¯°æÇÏ°í INÀÇ °ª Á¾·ù¸¦ ³Ã¸é°ú «»ÍÀ¸·Î
¹Ù²Û´Ù.
SELECT * FROM tSeason
PIVOT (MAX(sale) FOR item IN ('³Ã¸é', '«»Í'))
item¿¿¡ ÀÖ´ø ³Ã¸é°ú «»ÍÀÌ °¡·Î¿·Î À̵¿ÇÏ¿© »óÇ°º° ÆǸŷ®À»
Ãâ·ÂÇÑ´Ù. ¹» ȸÀü½ÃÅ°´Â°¡¿¡ µû¶ó µµÇ¥ÀÇ ¸ð¾çÀÌ ´Þ¶óÁø´Ù. 2°³ÀÇ
»óÇ°À» °¡·Î·Î µ¹¸®°í °èÀýº°·Î ÇàÀ» ±¸¼ºÇϸé 4Çà 2¿ÀÌ
µÇ¸ç °ªÀº ¿©ÀüÈ÷ 8°³ÀÌ´Ù. º¸¿©ÁÖ´Â ¹æ½Ä¸¸ ´Ù¸¦ »Ó °á±¹Àº
¶È°°Àº Á¤º¸¸¦ Ç¥ÇöÇÑ´Ù.
´ëÃæ ¾î¶² ½ÄÀ¸·Î µ¿ÀÛÇÑ´Ù´Â °ÍÀº ¾Ë ¼ö ÀÖÁö¸¸ ¿ª½Ã ½±Áö ¾Ê´Ù. ÇǺ¿
±â´ÉÀÌ µµÀԵDZâ Àü¿¡´Â UNION, GROUP BY, CASE µîÀÇ ±¸¹®À» Ãѵ¿¿øÇؼ ¼ø¼´ë·Î Á¶ÇÕÇؾß
±¸ÇöÇÒ ¼ö ÀÖ¾ú´Ù. ÀÌ·± º¹ÀâÇÑ µ¿ÀÛÀ» ´Ü ÇÑ ÁÙ·Î ¾ÐÃàÇؼ Ç¥ÇöÇÏ´Ï ¾î·Á¿ï ¼ö¹Û¿¡ ¾ø´Ù.
ȣȯ¼º üũ
PIVOTÀº SQL Ç¥ÁØÀ̾î¼
¾çÂÊ ´Ù Àß Áö¿øÇÏÁö¸¸ ¸î °¡Áö Â÷ÀÌÁ¡ÀÌ ÀÖ´Ù. MariaDB´Â ¾ÆÁ÷ ÇǺ¿À» Áö¿øÇÏÁö ¾Ê´Â´Ù. ¶È°°Àº ¸í·ÉÀ» SQL Server¿¡¼ ÀÛ¼ºÇÏ¸é ´ÙÀ½°ú °°´Ù.
SELECT * FROM tSeason
PIVOT (MAX(sale) FOR
season IN (º½, ¿©¸§, °¡À», °Ü¿ï)) pvt;
¿À¶óŬ¿¡ ºñÇØ µÎ °¡Áö Â÷ÀÌÁ¡ÀÌ ÀÖ´Ù. ¨ç ÇǺ¿ °á°ú Å×ÀÌºí¿¡ pvt º°¸íÀ» ºÙ¿´´Ù. Å×ÀÌºí º°¸íÀº ÀÌÈÄÀÇ ÂüÁ¶¸¦ À§ÇØ ÇÊ¿äÇÏ´Ù. ¿À¶óŬÀº º°¸íÀÌ ¿É¼ÇÀÌÁö¸¸
SQL Server´Â ´çÀå ¾²Áö ¾Ê´õ¶óµµ º°¸íÀÌ ÇʼöÀÌ´Ù. Ç×»ó
º°¸íÀ» ºÙÀ̸é ȣȯ¼ºÀ» È®º¸ÇÒ ¼ö ÀÖ´Ù.
¨è INÀýÀÇ °ª ¸ñ·ÏÀ» µû¿ÈÇ¥·Î °¨½ÎÁö ¾ÊÀ¸¸ç Çѱ۵µ ±×³É ¾²¸é µÈ´Ù. ¾îÂ÷ÇÇ
Çѱ۵µ Çʵå¸íÀ¸·Î ÀûÇÕÇÑ ¹®ÀÚ¿©¼ ±»ÀÌ ¹®ÀÚ¿·Î ¸¸µéÁö ¾Ê¾Æµµ µÈ´Ù. ¿À¶óŬÀº °ª ¸ñ·ÏÀ» µû¿ÈÇ¥·Î °¨½Î±â
¶§¹®¿¡ °á°ú¼ÂÀÇ Çʵå¸í¿¡µµ µû¿ÈÇ¥°¡ ³ªÅ¸³´Ù. Á¤ µû¿ÈÇ¥¸¦ ¾ø¾Ö·Á¸é °ª ¸ñ·Ï¿¡ º°¸íÀ» ÁÖ¸é µÈ´Ù.
SELECT * FROM tSeason
PIVOT (MAX(sale) FOR
season IN ('º½' AS º½, '¿©¸§' AS ¿©¸§, '°¡À»' AS °¡À», '°Ü¿ï' AS °Ü¿ï)) pvt;
ÀÌÈÄÀÇ ½Ç½ÀÀº ¿À¶óŬÀ» ±âÁØÀ¸·Î Ç쵂 º°¸í pvt´Â ÀÌÈÄÀÇ ÂüÁ¶¸¦ À§ÇØ Ç×»ó ºÙÀ̱â·Î ÇÑ´Ù. °ª ¸ñ·ÏÀº µû¿ÈÇ¥·Î
°¨½ÎµÇ SQL Server¿¡¼ ½ÇÇàÇÒ ¶§´Â µû¿ÈÇ¥¸¸ Á¦°ÅÇÏ¸é µÈ´Ù. ±×
¿ÜÀÇ ´Ù¸¥ ¹®¹ýÀº ¸ðµÎ °°¾Æ ÀÌÈÄÀÇ ¿¹Á¦´Â SQL Server¿¡¼µµ ¹®Á¦¾øÀÌ µ¿ÀÛÇÑ´Ù.
PIVOTÀÇ FOR ÀýÀº
´ë»ó Ä÷³, IN ÀýÀº ±× Ä÷³¿¡¼ ¿·Î ¸¸µé °ªÀÇ ¸ñ·ÏÀÌ´Ù. ±×·¸´Ù¸é
Áý°è ÇÔ¼öÀÇ ¿ªÇÒÀº ¹»±î? ÀÌ ±¸¹®Àº ȸÀüÇÑ ÈÄ °¢ Ä¿¡ ¾µ °ªÀ» ÁöÁ¤Çϴµ¥ À§ ¿¹¿¡¼´Â ÆǸŷ®À» Ç¥½ÃÇÏ´Â
°ÍÀÌ ÀûÇÕÇÏ´Ù. ±×·¯³ª ±×³É saleÀ̶ó°í ÀûÀ¸¸é ¿¡·¯ÀÌ´Ù.
SELECT * FROM tSeason
PIVOT (sale FOR season IN ('º½', '¿©¸§', '°¡À»', '°Ü¿ï')) pvt;
¿øº» Å×ÀÌºí¿¡ ¸ðµç sale °ªÀÌ ÀÖ´Ù°í º¸ÀåÇÒ ¼ö ¾ø°í ¶Ç ¹Ýµå½Ã
Çϳª¸¸ ÀÖ´Â °Íµµ ¾Æ´Ï´Ù. tSeason Å×À̺íÀº »óÇ°º°, °èÀýº°·Î
ÆǸŷ®ÀÌ µü Çϳª¾¿ µé¾î ÀÖÁö¸¸ Åë°è¶õ ´©¶ôµÉ ¼öµµ ÀÖ°í °°Àº °ªÀ» ¿©·¯ ¹ø ÀûÀ» ¼öµµ ÀÖ´Ù. ¿ÀÈ÷·Á
±×·± °æ¿ì°¡ ´õ ÀϹÝÀûÀÌ´Ù.
±×·¡¼ Áߺ¹ ÆǸŷ®À» Áý°èÇÒ ¹æ¹ýÀ» ÁöÁ¤ÇØ¾ß ÇÑ´Ù. À§ ¿¹¿¡¼´Â MAX¸¦ »ç¿ëÇߴµ¥ AVG³ª SUM,
MINÀ» »ç¿ëÇصµ °á°ú´Â °°´Ù. ÇϳªÀÇ ´ÜÀÏ°ª¿¡ ´ëÇØ Çհ質 Ãִ볪 ÃÖ¼Ò³ª Æò±ÕÀ̳ª ¹»
±¸Çصµ ¶È°°Àº °ªÀÌ ³ª¿Ã ¼ö¹Û¿¡ ¾ø´Ù.
SELECT * FROM tSeason
PIVOT (SUM(sale) FOR season IN ('º½', '¿©¸§', '°¡À»', '°Ü¿ï')) pvt;
±×·¯³ª Áߺ¹À̳ª ´©¶ôÀÌ ÀÖÀ» °æ¿ì¿¡´Â Áý°è ÇÔ¼ö¿¡ µû¶ó °á°ú°¡ ´Þ¶óÁø´Ù. ÀÌ·±
°æ¿ì¸¦ Å×½ºÆ®ÇØ º¸±â À§ÇØ µ¥ÀÌÅ͸¦ º¯°æÇÑ Å×À̺íÀ» »õ·Î ¸¸µé¾î º¸ÀÚ. ¶È°°Àº ±¸Á¶·Î tSeason2 Å×À̺íÀ» ¸¸µé°í ´ÙÀ½ µ¥ÀÌÅ͸¦ ä¿ö ³Ö´Â´Ù.
INSERT INTO tSeason2 VALUES ('³Ã¸é', 'º½', 20);
INSERT INTO tSeason2 VALUES ('³Ã¸é', '¿©¸§', 50);
INSERT INTO tSeason2 VALUES ('³Ã¸é', '°¡À»', 30);
INSERT INTO tSeason2 VALUES ('«»Í', 'º½', 30);
INSERT INTO tSeason2 VALUES ('«»Í', '°¡À»', 20);
INSERT INTO tSeason2 VALUES ('«»Í', '°Ü¿ï', 40);
INSERT INTO tSeason2 VALUES ('«»Í', '°Ü¿ï', 30);
¾öµ¿¼³ÇÑ¿¡ ³Ã¸éÀ» Áñ±â´Â »ç¶÷Àº µå¹°°í ¿©¸§¿¡ ¶ß°Å¿î «»ÍÀº ÀαⰡ ¾ø´Ù. °Ô´Ù°¡
«»ÍÀÇ °Ü¿ï ÆǸŷ®ÀÌ µÎ ¹ø ±â·ÏµÇ¾î ÀÖ´Ù. ÀÌ·± Åë°è°¡ ´õ Çö½ÇÀûÀÌ´Ù. °èÀýº°·Î ÇǺ¿Ç쵂 Áý°è ÇÔ¼ö¸¦ MAX¿Í SUMÀ¸·Î ÁöÁ¤ÇØ º¸ÀÚ.
SELECT * FROM tSeason2 PIVOT (MAX(sale) FOR season
IN ('º½', '¿©¸§', '°¡À»', '°Ü¿ï')) pvt;
SELECT * FROM tSeason2 PIVOT (SUM(sale) FOR season
IN ('º½', '¿©¸§', '°¡À»', '°Ü¿ï')) pvt;
ÆǸŷ®ÀÌ Çϳª ¶Ç´Â ¾ø´Â »óÇ°Àº ¾î¶² Áý°è ÇÔ¼ö¸¦ ¾²³ª Â÷ÀÌ°¡ ¾øÁö¸¸ °Ü¿ï ÆǸŷ®ÀÌ 40, 30À¸·Î µÎ ¹ø ±â·ÏµÇ¾î Àִ «»ÍÀÇ °æ¿ì´Â ´Ù¸£´Ù. MAX´Â
ÃÖ´ë°ªÀÎ 40À» Ãâ·ÂÇÏ°í SUMÀº µÎ °ªÀ» ´õÇÑ 70À» Ãâ·ÂÇÑ´Ù. MIN Áý°è ÇÔ¼ö¸¦ ¾²¸é 30À¸·Î ³ª¿À¸ç AVG Áý°è ÇÔ¼ö¸¦ ¾²¸é 35°¡ µÈ´Ù. COUNT¸¦ ¾²¸é ÆǸŷ®ÀÌ ¾Æ´Ñ Åë°èÀÇ °³¼ö¸¦ Ãâ·ÂÇÑ´Ù.
SELECT * FROM tSeason2 PIVOT (COUNT(sale) FOR
season IN ('º½', '¿©¸§', '°¡À»', '°Ü¿ï')) pvt;
Á¤º¸°¡ ¾øÀ¸¸é 0À¸·Î Ç¥½ÃÇÏ°í «»ÍÀÇ °Ü¿ï ÆǸŷ® Á¤º¸´Â 2°³ ÀÖ´Ù°í Ç¥½ÃÇÑ´Ù. tSeason, tSeason2 Å×À̺íÀ» ÅëÇØ
½Ç½ÀÀ» ¹Ýº¹ÇÏ¿© Áý°è ÇÔ¼ö, FOR, IN °¢ ÀýÀÇ ¿ªÇÒ°ú Àǹ̿¡ ´ëÇØ Á¤È®ÇÏ°Ô Á¤¸®ÇÏ°í ³Ñ¾î°¡ÀÚ. ±âº» ±¸¹®À» È®½ÇÈ÷ ÀÌÇØÇØ¾ß ÀÌÈÄÀÇ ¹®¹ýÀÌ Çò°¥¸®Áö ¾Ê´Â´Ù.
¾Õ¿¡¼ »ç¿ëÇÑ ¿¹Á¦ Å×À̺íÀº ÇǺ¿ÀÇ ±âº» µ¿ÀÛÀ» Á÷°üÀûÀ¸·Î ¼³¸íÇϱâ À§ÇØ ÃÖ¼ÒÇÑÀÇ Çʵ常 Æ÷ÇÔÇß´Ù. Çö½ÇÀûÀÎ Åë°è Å×À̺íÀº ÇÊµå ¼ö°¡ ´õ ¸¹°í ¿©·¯ °¡Áö °ªÀÌ ¸¶±¸ ¼¯¿© ÀÖ¾î °Å´ëÇÏ´Ù. ÀÌ·² °æ¿ì ²À ÇÊ¿äÇÑ Çʵ常 °ñ¶ó Åë°è¸¦ ÀÛ¼ºÇÏ´Â ¹æ¹ýÀ» ¿¬±¸ÇØ º¸ÀÚ. ´ÙÀ½
»ùÇà Å×À̺íÀ» ¸¸µç´Ù.
CREATE TABLE tTraffic
(
line
VARCHAR(10),
hour
INT,
car
VARCHAR(20),
traffic
INT
);
INSERT INTO tTraffic VALUES ('°æºÎ', 1, '½Â¿ëÂ÷', 40);
INSERT INTO tTraffic VALUES ('°æºÎ', 2, '½Â¿ëÂ÷', 41);
INSERT INTO tTraffic VALUES ('°æºÎ', 3, '½Â¿ëÂ÷', 42);
INSERT INTO tTraffic VALUES ('°æºÎ', 1, 'Æ®·°', 30);
INSERT INTO tTraffic VALUES ('°æºÎ', 3, 'Æ®·°', 32);
INSERT INTO tTraffic VALUES ('È£³²', 1, '½Â¿ëÂ÷', 20);
INSERT INTO tTraffic VALUES ('È£³²', 2, '½Â¿ëÂ÷', 10);
INSERT INTO tTraffic VALUES ('È£³²', 2, '½Â¿ëÂ÷', 11);
INSERT INTO tTraffic VALUES ('È£³²', 3, '½Â¿ëÂ÷', 22);
INSERT INTO tTraffic VALUES ('È£³²', 1, 'Æ®·°', 10);
INSERT INTO tTraffic VALUES ('È£³²', 2, 'Æ®·°', 11);
INSERT INTO tTraffic VALUES ('È£³²', 3, 'Æ®·°', 12);
ÀÌ Å×À̺íÀº µµ·Îº°, ½Ã°£º°, Â÷Á¾º°
ÅëÇà·®À» ÀúÀåÇÑ´Ù. ¿©·¯ ±âÁØÀ¸·Î Åë°è¸¦ ³» º¸±â À§ÇØ °æºÎ¼±Àº 2½ÃÀÇ
Æ®·° ÅëÇà·®ÀÌ ¾ø°í È£³²¼±Àº 2½ÃÀÇ ½Â¿ëÂ÷ ÅëÇà·®À» Áߺ¹ÇØ µÎ¾ú´Ù. car
Çʵ忡 ÀÖ´Â ½Â¿ëÂ÷, Æ®·°°ªÀ» ȸÀüÇÏ°í ÅëÇà·®ÀÇ ÃÑÇÕÀ» ±¸ÇØ Â÷Á¾º°·Î ÇǺ¿ÇØ º¸ÀÚ.
SELECT * FROM tTraffic PIVOT (SUM(traffic) FOR car
IN ('½Â¿ëÂ÷', 'Æ®·°')) pvt;
PIVOT ¿¬»êÀÚ´Â ´ë»ó Å×À̺íÀÇ ¸ðµç Ä÷³Áß ÇǺ¿ ´ë»ó Ä÷³¸¸ »©°í
GROUP BY ¿¬»êÀ» ¼öÇàÇÑ´Ù. tTrafficÀÇ 4°³ Çʵå Áß ÇǺ¿ ´ë»óÀÎ car¿Í Áý°è ´ë»óÀÎ trafficÀ» Á¦¿ÜÇÑ line, hour¿¡ ´ëÇØ ±×·ìÇΠó¸®ÇÑ´Ù. ±×·¡¼ Áý°è ÇÔ¼ö°¡ ÇʼöÀûÀÌ´Ù.
¿øº»¿¡ Áߺ¹°ªÀÌ Á¸ÀçÇÒ ¼ö ÀÖ¾î ¾î¶² ¹æ¹ýÀ¸·Îµç ÇÕÃÄ¾ß ÇÏ¸ç ±× ¹æ¹ýÀ» Áý°è ÇÔ¼ö°¡ °áÁ¤ÇÑ´Ù. À§ ÇǺ¿Àº SUM Áý°è ÇÔ¼ö¸¦ »ç¿ëÇßÀ¸¸ç ±×·¡¼ È£³²¼± 2½Ã ½Â¿ëÂ÷ ÅëÇà·®À» ÇÕÃÄ 21·Î Ç¥½ÃÇÑ´Ù. ÃÖ´ë ÅëÇà·®À» »ÌÀ¸·Á¸é MAX¸¦ ¾²°í Æò±Õ ÅëÇà·®À» ±¸ÇÏ·Á¸é AVG¸¦ ¾²¸é µÈ´Ù.
´ÙÀ½Àº µµ·Î¸íÀ̳ª ½Ã°£À» ±âÁØÀ¸·Î ÇǺ¿ÇØ º¸ÀÚ. FOR¿¡ ¿øÇÏ´Â ±âÁØ
Çʵ带 Àû°í IN¿¡ ´ë»ó Çʵ尪À» ³ª¿ÇÑ´Ù. µµ·Îº° Åë°è¸¦
»ÌÀ¸·Á¸é FOR Àý¿¡ lineÀ» Àû°í IN Àý¿¡ lineÀÇ °ªÀÎ °æºÎ, È£³²À»
Àû´Â´Ù. ½Ã°£º° Åë°è¸¦ »ÌÀ» ¶§´Â FOR Àý¿¡ hour¸¦ Àû°í IN Àý¿¡ 1, 2,
3 ½Ã°£À» Àû´Â´Ù.
SELECT * FROM tTraffic PIVOT (SUM(traffic) FOR
line IN ('°æºÎ', 'È£³²')) pvt;
SELECT * FROM tTraffic PIVOT (SUM(traffic) FOR
hour IN ('1', '2', '3')) pvt;
1, 2, 3Àº ¼ýÀÚ¿©¼ µû¿ÈÇ¥ ¾øÀÌ ±×³É »ç¿ëÇصµ »ó°ü¾ø´Ù. SQL Server´Â ¼ýÀÚ¸¦ ¸íĪÀ¸·Î ÀÎÁ¤ÇÏÁö ¾Ê¾Æ [1], [2], [3]
½ÄÀ¸·Î °ýÈ£¸¦ °¨½Î¾ß ÇÑ´Ù. °¡·Î ÇǺ¿¿ÀÌ ´Ã¾î³ª¸é ¼¼·Î Çà ¼ö´Â ÁÙ¾îµç´Ù. 12°³ÀÇ °ªÀ» µµ·Î¸í 2Á¾·ù·Î ÇǺ¿Çϸé 6Çà, ½Ã°£º° 3Á¾·ù·Î ÇǺ¿Çϸé
4ÇàÀÌ´Ù.
ÀÌ ¿¹¿¡¼ º¸´Ù½ÃÇÇ Åë°è ±âÁØÀÌ ¿©·¯ °³ÀÎ Å×À̺íÀº ¿øÇÏ´Â ±âÁØÀ¸·Î Åë°è¸¦ ÀÚÀ¯·Ó°Ô ¸¸µé ¼ö ÀÖ´Ù. Â÷Á¾À¸·Î ÇǺ¿ÇÏ¸é µµ·Îº°, ½Ã°£º° Åë°è¸¦ »Ì°í µµ·Î¸¦ ±âÁØÀ¸·Î ÇǺ¿Çϸé
½Ã°£º°, Â÷Á¾º° Åë°è¸¦ »êÃâÇÏ°í ½Ã°£À¸·Î ÇǺ¿ÇÏ¸é µµ·Îº°, Â÷Á¾º°
Åë°è¸¦ ¸¸µç´Ù.
ÇǺ¿ ´ë»ó¸¸ »©°í ³²Àº Çʵ带 ¸ðµÎ ±×·ìÇÎÇÑ´Ù. ±×·¸´Ù¸é ÀϺθ¦ ±×·ìÇο¡¼
Á¦¿ÜÇÏ·Á¸é ¾î¶»°Ô ÇÒ±î? ¿¹¸¦ µé¾î Â÷Á¾À¸·Î ÇǺ¿Ç쵂 ½Ã°£Àº ¹«½ÃÇÏ°í µµ·Îº° ÅëÇà·®¸¸ ±¸ÇÏ°í ½Í´Ù°í
ÇÏÀÚ. ÇǺ¿ ´ë»ó Å×À̺íÀÇ ÇÊµå ¸ñ·Ï¿¡ * ´ë½Å ½Ã°£ Çʵ带
»ý·«ÇÏ°í ³ª¸ÓÁö Çʵ常 ÀûÀ¸¸é µÉ °Å °°´Ù.
SELECT line, car, traffic FROM tTraffic
PIVOT (SUM(traffic) FOR car IN ('½Â¿ëÂ÷', 'Æ®·°')) pvt;
Â÷Á¾º°·Î ÇǺ¿ÇÏ¿© ÅëÇà·®À» Áý°èÇ쵂 lineÀ¸·Î¸¸ ±×·ìÇÎÇ϶ó´Â ¶æÀÌ´Ù. car¿Í trafficÀº ÇǺ¿ ´ë»óÀÌ¸ç ³²Àº Çʵå´Â line¹Û¿¡ ¾øÀ¸´Ï µµ·Îº°·Î¸¸ ±×·ìÇÎÇ϶ó´Â ¸í·ÉÀÌ´Ù. °æºÎ, È£³²¼±¿¡ ½Â¿ëÂ÷¿Í Æ®·°ÀÌ °¢°¢ ¸î ´ë³ª ÅëÇàÇß´ÂÁö¸¸ ¾Ë°í ½ÍÀº °ÍÀÌ´Ù.
¾óÇÍ º¸±â¿¡´Â µÉ °Å °°°í ´©±¸³ª ÀÌ·± Äڵ带 ¶°¿Ã¸®Áö¸¸ ¸í¹éÇÑ ¿¡·¯ÀÌ´Ù. ±×
ÀÌÀ¯´Â SELECTº¸´Ù PIVOTÀÌ ¸ÕÀú 󸮵DZ⠶§¹®ÀÌ´Ù. SELECT´Â ¸í·ÉÀÌ°í PIVOTÀº ¿¬»êÀÚ¿©¼ PIVOTÀÇ ¿ì¼± ¼øÀ§°¡ ´õ ³ô´Ù. tTraffic¿¡ ´ëÇØ ÇǺ¿À» ¸ÕÀú
ó¸®ÇÏ°í SELECT´Â ±× °á°ú¸¦ Ãâ·ÂÇÑ´Ù.
ÇǺ¿¿¡ ÀÇÇØ È¸Àü ´ë»óÀÎ car¿Í traffic
Çʵå´Â »ç¶óÁö°í ´ë½Å ȸÀü °á°ú·Î ½Â¿ëÂ÷, Æ®·° Çʵ带 »õ·Î ¸¸µç´Ù. car¿Í trafficÀº ÇǺ¿ÀÇ Àç·áÀÏ »Ó ÇǺ¿ °á°ú·Î ³²¾Æ ÀÖÁö
¾Ê¾Æ SELECT ¹® ½ÇÇà½Ã¿¡´Â Á¸ÀçÇÏÁö ¾Ê´Â´Ù. SELECT ÀýÀÇ
ÇÊµå ¸ñ·ÏÀº ÇǺ¿¿¡´Â ¾Æ¹«·± ¿µÇâÀ» ¹ÌÄ¡Áö ¸øÇϸç ÇǺ¿ ÈÄÀÇ Ãâ·Â ´ë»óÀÏ »ÓÀÌ´Ù.
ÀÌ ¹®Àå¿¡¼ ÇǺ¿ ´ë»óÀº tTraffic ÀüüÀÌ´Ù. ½Ã°£À¸·Î ±×·ìÇÎÇÏÁö ¾ÊÀ¸·Á¸é ÇǺ¿Çϱâ Àü¿¡ hour¸¦ Á¦¿ÜÇØ¾ß Çϸç
±×·¯·Á¸é tTraffic Àüü Å×ÀÌºí ´ë½Å ¾µ ¼ºêÄõ¸®°¡ ÇÊ¿äÇÏ´Ù. ÇǺ¿
´ë»ó Å×À̺íÀ» ÀζóÀκä·Î Á¤ÀÇÇÑ ÈÄ ÇǺ¿ÇÏ°í ±× °á°ú¸¦ Ãâ·ÂÇØ¾ß ÇÑ´Ù. ±×·¡¼ ÇǺ¿ ¹®ÀåÀº Åë»ó ´ÙÀ½°ú
°°Àº ¸ð¾çÀ¸·Î ÀÛ¼ºÇÑ´Ù.
SELECT Ãâ·Â´ë»ó FROM
(
SELECT
ÇǺ¿´ë»ó FROM tTraffic
) prepvt
PIVOT (SUM(Áý°èÇÒÇʵå) FOR ÇǺ¿Çʵå IN (¿·Î ¸¸µé °ª)) pvt;
¼ºêÄõ¸®¿¡¼ ¿øÇÏ´Â Çʵ常 ¼±Á¤ÇÏ¿© prepvt ÀζóÀκ並 Á¤ÀÇÇÏ°í
À̸¦ ÇǺ¿ÇÑ ÈÄ ¿ÜºÎÄõ¸®¿¡¼ °á°ú¸¦ Ãâ·ÂÇÑ´Ù. tTrafficÀÌ ÀÖ´ø ÀÚ¸®¿¡ prepvtÀÌ µé¾î°¬À» »ÓÀÌ´Ù. prepvtÀÌ SELECT * FROM tTrafficÀ̶ó¸é ¿øº»°ú °°¾Æ ÇǺ¿ °á°úµµ °°´Ù.
±×·¯³ª ÀζóÀκä·Î Ç¥ÇöÇÏ¸é ¿©·¯ °¡Áö º¯ÇüÀ» ÁÙ ¿©Áö°¡ »ý±ä´Ù. ÀζóÀκäÀÇ
SELECT *Àº °á±¹ ¸ðµç Çʵ带 ´Ù ³ª¿ÇÑ °Í°ú °°À¸´Ï SELECT
line, hour, car, trafficÀ̶ó°í ¾´ °Í°ú °°´Ù. ÀÌ ¸ñ·Ï¿¡¼ ¿øÇÏ´Â Çʵ带
»ý·«ÇÏ¸é µÈ´Ù. ÀζóÀκäÀÇ ÇÊµå ¸ñ·Ï¿¡¼ hour¸¦ »ý·«ÇØ
º¸ÀÚ.
SELECT * FROM
(
SELECT
line, car, traffic FROM tTraffic
) prepvt
PIVOT (SUM(traffic) FOR car IN ('½Â¿ëÂ÷', 'Æ®·°')) pvt;
¼¼ Çʵ常 ÀûÀ¸¸é car¿Í trafficÀº
ÇǺ¿¿¡ ÀÇÇØ »ç¶óÁö°í line¸¸ ±×·ìÇÎ ´ë»óÀÌ´Ù. ÇǺ¿ÀÌ
line¿¡ ´ëÇØ ±×·ìÇÎÇÏ¿© Áý°è ó¸®ÇÏ°í ¿ÜºÎÄõ¸®´Â ±× °á°ú¸¦ ¸ðµÎ Ãâ·ÂÇÑ´Ù. À§ ¸í·ÉÀÇ ½ÇÇà ¼ø¼´Â ´ÙÀ½°ú °°´Ù. °¢ ºÎºÐÀÌ ´Ü°èº°·Î ½ÇÇàµÇ¸ç
Á¤ÇØÁø ¿ªÇÒÀÌ ÀÖ´Ù.
¸í·ÉÀÌ ±æ°í º¹ÀâÇÏÁö¸¸ °á±¹Àº Å×À̺íÀ» °¡°øÇÏ¿© Ãâ·ÂÇÏ´Â SELECT ¹®ÀåÀÏ
»ÓÀÌ´Ù. ÀÌ µÚ¿¡ WHERE ÀýÀ̳ª ORDER BY ÀýÀÌ ´õ ¿Ã ¼ö ÀÖÀ¸¸ç 2¹ø°ú 3¹ø »çÀÌ¿¡ ³¢¾îµç´Ù. ÇǺ¿ÇÑ °á°úµµ ÇϳªÀÇ Å×À̺íÀ̹ǷΠ´Ù¸¥ Å×À̺íÀ»
Á¶ÀÎÇÒ ¼öµµ ÀÖ´Ù.
¿Ö ÇǺ¿ ´ë»ó Å×À̺íÀ» ÀζóÀκä·Î Á¤ÀÇÇÏ´ÂÁö ÀÌÇØÇØ¾ß ÀÚÀ¯ÀÚÀç·Î ÇǺ¿À» ±¸»çÇÒ ¼ö ÀÖ´Ù. ÇǺ¿ ´ë»ó°ú ±×·ìÇÎ ´ë»óÀ» Á¤È®È÷ ÁöÁ¤Çϱâ À§ÇؼÀÌ´Ù. ÀÌ¿Õ ¿¬±¸ÇÑ
±è¿¡ ´õ ±íÀÌ µé¾î°¡ º¸ÀÚ. ÀζóÀκä·Î ÇǺ¿ ´ë»óÀ» ¼±ÅÃÇÏ´Â ´ë½Å Àüü Å×À̺íÀ» ÇǺ¿ÇÑ ÈÄ GROUP BY¸¦ µû·Î ¼öÇàÇÒ ¼öµµ ÀÖ´Ù. ´ÙÀ½ Äڵ嵵 ¶È°°Àº °á°ú¸¦
Ãâ·ÂÇÑ´Ù.
SELECT line, SUM(½Â¿ëÂ÷),
SUM(Æ®·°) FROM tTraffic
PIVOT (SUM(traffic) FOR car IN ('½Â¿ëÂ÷' AS ½Â¿ëÂ÷, 'Æ®·°' AS Æ®·°)) pvt
GROUP BY line;
tTraffic Å×À̺í Àüü¸¦ Â÷Á¾º°·Î ÇǺ¿ÇÑ ÈÄ ±× °á°ú¿¡ ´ëÇØ
lineÀ¸·Î ±×·ìÇÎÇÏ¸é µµ·Îº° ÅëÇà·®ÀÌ ³ª¿Â´Ù. ¼ºêÄõ¸®°¡
¾ø¾î ±¸¹®ÀÌ Âª°í Á÷°üÀûÀÌ´Ù. ÇÏÁö¸¸ GROUP BY¸¦ Á÷Á¢
»ç¿ëÇßÀ¸¹Ç·Î SELECT Àý¿¡¼ ±×·ìÇÎ ±âÁØ ÇÊµå ¿Ü¿¡´Â Áý°è ÇÔ¼ö¸¸ ½á¾ß ÇÏ´Â ºÒÆíÇÔÀÌ ÀÖ´Ù.
µÎ ±¸¹®Àº ÇǺ¿ÇÒ ¶§ µü ¿øÇÏ´Â ±âÁØÀ¸·Î ±×·ìÇÎÇÏ¸é¼ Áý°è±îÁö ÇÒ °ÍÀÎÁö, ¾Æ´Ï¸é
ÀÏ´Ü ÇǺ¿ÇØ ³õ°í ±×·ìÇÎÇÏ¸é¼ Áý°è¸¦ Á÷Á¢ ÇÒ °ÍÀÎÁö°¡ ´Ù¸£´Ù. ÇǺ¿ ´ë»ó¸¸ Àß ÁöÁ¤Çϸé PIVOT ¿¬»êÀÚ°¡ ±×·ìÇÎ, Áý°è¸¦ ¾Ë¾Æ¼ ´Ù Çϵµ·Ï µÇ¾î ÀÖ¾î Æí¸®ÇÏ°í
ÇÑ ¹ø¿¡ ó¸®ÇÏ´Ï ¼Óµµµµ ºü¸£´Ù.
¿©±â±îÁö ÀÌÇØÇßÀ¸¸é ÀÀ¿ëÇØ º¸ÀÚ. ¶È°°Àº ¹æ½ÄÀ¸·Î ¼ºêÄõ¸®¿¡¼ lineÀ» »ý·«ÇÏ¸é ½Ã°£º°·Î¸¸ ±×·ìÇÎµÇ¾î ½Ã°£º° ÅëÇà·®À» ÇÕ»êÇÏ¿© Ãâ·ÂÇÑ´Ù. ¾Æ·¡
Äõ¸®¸¦ º¸±â Àü¿¡ Á÷Á¢ ½Ç½ÀÇØ º¸ÀÚ. Àüü ÇǺ¿ ÈÄ GROUP BY
hour¸¦ Àû¿ëÇÑ °Í°ú °°´Ù.
SELECT * FROM
(
SELECT
hour, car, traffic FROM tTraffic
) prepvt
PIVOT (SUM(traffic) FOR car IN ('½Â¿ëÂ÷', 'Æ®·°')) pvt;
±×·¸´Ù¸é line, hour µÑ ´Ù »ý·«ÇÏ¸é ¾î¶»°Ô µÉ±î? ÇǺ¿ÀÇ Àç·á Çʵ常 ÀÖ°í ±× ¿ÜÀÇ Çʵ尡 ¾øÀ¸´Ï °á°ú´Â ÇǺ¿ Çʵ常 ³²´Â´Ù.
±×·ìÇÎÇÒ ´ë»óÀÌ ¾øÀ¸´Ï ½Ã°£°ú µµ·Î¿¡ µû¸¥ ÅëÇà·®ÀÌ ¸ðµÎ ÇÕ»êµÇ¾î Â÷Á¾¿¡ ´ëÇÑ Àüü ÅëÇà·®¸¸ ³ªÅ¸³´Ù.
SELECT * FROM
(
SELECT
car, traffic FROM tTraffic
) prepvt
PIVOT (SUM(traffic) FOR car IN ('½Â¿ëÂ÷', 'Æ®·°')) pvt;
ÇǺ¿ ¸í·ÉÀº Åë»ó µÎ °³ÀÇ SELECT¸¦ ÁßøÇÑ´Ù. ¾ÈÂÊÀÇ ÀζóÀκä´Â ÇǺ¿ ´ë»ó Å×À̺íÀÇ ¸ð¾çÀ» °áÁ¤ÇÏ°í ¿ÜºÎÄõ¸®´Â ÇǺ¿ °á°ú¼Â Áß ¾î¶² Çʵ带 ¾î¶»°Ô Ãâ·ÂÇÒ
°ÍÀΰ¡¸¦ ÁöÁ¤ÇÑ´Ù. Åë»ó ¿ÜºÎÄõ¸®¿¡´Â *¸¦ ¾²¸ç ÇǺ¿ °á°ú¼ÂÀ»
´Ù Ãâ·ÂÇÑ´Ù.
¿ÜºÎÄõ¸®¿¡¼ ÀϺΠÇʵ带 »ý·«Çϸé ÇØ´ç Çʵå´Â Ãâ·Â ´ë»ó¿¡¼ Á¦¿ÜÇÑ´Ù. ÀζóÀκ信
hour°¡ ÀÖÀ¸¸é ½Ã°£º°·Î ±×·ìÇÎÇÏÁö¸¸ ¿ÜºÎÄõ¸®¿¡ hour Çʵ带
»©¸é ½Ã°£°ªÀÌ ³ªÅ¸³ªÁö ¾Ê´Â´Ù. ¹®¹ýÀûÀ¸·Î´Â ÇÕ´çÇÏÁö¸¸ ÀÌ·¸°Ô µÇ¸é °¢ ÇàÀÇ Àǹ̰¡ ¸ðÈ£ÇØÁ® Åë°è·Î¼ÀÇ
Àǹ̰¡ ¾ø°í ¹«½¼ Á¤º¸ÀÎÁö ¾Ë¾Æº¸±âµµ ¾î·Æ´Ù.
SELECT line, Æ®·°, ½Â¿ëÂ÷ FROM
(
SELECT
line, hour, car, traffic FROM tTraffic
) prepvt
PIVOT (SUM(traffic) FOR car IN ('½Â¿ëÂ÷' AS ½Â¿ëÂ÷, 'Æ®·°' AS Æ®·°)) pvt;
ÀζóÀκ信 Æ÷ÇÔÇÏ¿© ±×·ìÇÎÇÑ Çʵå´Â ÃÖÁ¾ Ãâ·Â ´ë»ó¿¡µµ Æ÷ÇÔÇÏ´Â °ÍÀÌ ÀÚ¿¬½º·´´Ù. ¿ÜºÎÄõ¸®¿¡¼ ÇʵåÀÇ ¼ø¼¸¦ Á¶Á¤Çϰųª Æ÷¸ËÀ» ¹Ù²Ü ¼öµµ ÀÖ´Ù.
SELECT line || '¼± ' ||
CAST(hour AS VARCHAR(10)) || '½Ã' AS ±¸ºÐ, Æ®·°, ½Â¿ëÂ÷ FROM
(
SELECT
line, hour, car, traffic FROM tTraffic
) prepvt
PIVOT (SUM(traffic) FOR car IN ('½Â¿ëÂ÷' AS ½Â¿ëÂ÷, 'Æ®·°' AS Æ®·°)) pvt
ORDER BY line;
line°ú hour¸¦ Á¶ÇÕÇÏ¿©
ÇϳªÀÇ Çʵå·Î ÇÕÄ¡°í Æ®·°°ú ½Â¿ëÂ÷ÀÇ ¼ø¼¸¦ Á¶Á¤Çß´Ù. ÇǺ¿ °á°úµµ ÇϳªÀÇ Å×À̺íÀ̹ǷΠSELECT Àý¿¡¼ Çʵ忡 ´ëÇÑ ¸ðµç Á¶ÀÛÀ» ÀÚÀ¯·Ó°Ô ÇÒ ¼ö ÀÖ´Ù. µµ·Î¼øÀ¸·Î
Á¤·ÄÇϱâ À§ÇØ ORDER BY lineÀ» ºÙ¿´´Ù.
ÇǺ¿À» ÇÏ´Â ´ë»óµµ Å×À̺íÀÌ°í ÇǺ¿À» ÇÑ °á°úµµ Å×À̺íÀÌ´Ù. ´çÀå
ÇÊ¿äÄ¡ ¾Ê´õ¶óµµ ÇǺ¿ ÀüÈÄ¿¡ ¿©·¯ °¡Áö º¯ÇüÀ» °¡Çϱâ À§ÇØ ÀζóÀκ並 ±¸¼ºÇÏ´Â °ÍÀÌ ÁÁ´Ù. Áß°£¿¡ Á¶ÀÎÀÌ
³¢¾îµé ¼öµµ ÀÖ°í ÇǺ¿ °á°ú¸¦ UNIONÀ¸·Î ÇÕÄ¥ ¼öµµ ÀÖ´Ù. ±âº»±â¸¸
Ãæ½ÇÇÏ¸é ¿©·¯ °¡Áö ±â¹ýÀ» ¾ó¸¶µçÁö Á¶ÇÕÇÒ ¼ö ÀÖ´Ù.
¿¬½À ¹®Á¦
12.tSeason2¸¦ ÇǺ¿ÇÏ¿© °èÀýº° ÆǸŷ®À» Ãâ·ÂÇÏ¸é ¿©¸§, °Ü¿ï µî ÆǸŷ®ÀÌ ¾ø´Â ÄÀº NULL·Î Ç¥½ÃµÇ´Âµ¥ 0À» ´ë½Å Ãâ·ÂÇØ º¸ÀÚ.
13.tMonthSale Å×ÀÌºí¿¡¼ ³âµµº° ÃÑ ÆǸŷ®À» Áý°èÇ쵂 ³âµµ¸¦
¿·Î ȸÀüÇÏ¿© Ç¥½ÃÇ϶ó.
°øÀå ÀÚµ¿È³ª °èÁ °Å·¡ ½Ã½ºÅÛÀº µ¥ÀÌÅÍÀÇ »ý¼º ºóµµ°¡ Àæ´Ù. »ý»ê
Àåºñ¿¡´Â °®°¡Áö ¼¾¼°¡ ºÙ¾î ÀÖ°í Á¾·ùµµ õÂ÷ ¸¸º°À̶ó ¿À» ¹Ì¸® µðÀÚÀÎÇϱ⠾î·Æ´Ù. ÀÌ·² ¶§´Â ¼¾¼
À̸§°ú ÇÔ²² °ªÀ» ·¹ÄÚµå·Î ¹¾î »ðÀÔÇÑ´Ù. ½ÇÁ¦ ½Ã½ºÅÛÀº º¹ÀâÇϹǷΠÀͼ÷ÇÑ Å×À̺í·Î ºñ½ÁÇÑ »óȲÀ» ¸¸µé¾î º¸ÀÚ.
CREATE TABLE tCityStat
(
name
CHAR(10),
attr
CHAR(10),
value
INT
);
INSERT INTO tCityStat VALUES ('¼¿ï', 'area', 605);
INSERT INTO tCityStat VALUES ('¼¿ï', 'popu', 974);
INSERT INTO tCityStat VALUES ('¼¿ï', 'gu', 25);
INSERT INTO tCityStat VALUES ('ÀÎÁ¦', 'area', 1646);
INSERT INTO tCityStat VALUES ('ÀÎÁ¦', 'popu', 3);
INSERT INTO tCityStat VALUES ('ÀÎÁ¦', 'home', 15409);
INSERT INTO tCityStat VALUES ('ȫõ', 'area', 1819);
µµ½ÃÀÇ ¼Ó¼º°ªÀÌ ¼¾¼·ÎºÎÅÍ µé¾î¿À´Â ÃøÁ¤°ªÀ̶ó°í °¡Á¤ÇÏÀÚ. ¼Ó¼ºÀÇ
Á¾·ù´Â µµ½Ã¸¶´Ù Á¦°¢°¢ÀÌ´Ù. ¼¿ïÀº ÀÚÄ¡±¸ÀÇ °³¼ö ¼Ó¼ºÀÌ ÀÖ°í ÀÎÁ¦´Â °¡±¸¼ö ¼Ó¼ºÀÌ ÀÖ´Ù. ÀԷµǴ °ªÀ» ÀÏ´Ü ½×¾Æ ³õ±â¸¸ ÇÏ¸é ¾î¶»°Ôµç È°¿ëÇÒ ¼ö ÀÖ´Ù.
ÀÌ Å×ÀÌºí¿¡¼ °¢ µµ½ÃÀÇ Àα¸¹Ðµµ¸¦ °è»êÇØ º¸ÀÚ. tCity Å×À̺íÀ̶ó¸é
Àα¸¸¦ ¸éÀûÀ¸·Î ³ª´©¸é µÇÁö¸¸ ÀÌ·± ±¸Á¶¿¡¼´Â µÎ °ªÀÌ ´Ù¸¥ Çà¿¡ ÀÖ¾î °è»ê½ÄÀ» ¾µ ¼ö ¾ø´Ù. °è»ê½ÄÀº
°°Àº ·¹ÄÚµå ¼Ò¼ÓÀÇ Çʵ峢¸®³ª »ó¼ö¸¦ ¿¬»êÇÏ´Â °ÍÀÌ´Ù. ¶³¾îÁ® ÀÖ´Â ÇàÀ» °è»êÇÏ·Á¸é tCity ºñ½ÁÇÑ ±¸Á¶·Î ¸¸µé¾î¾ß Çϸç À̶§ ÇÊ¿äÇÑ ±â¼úÀÌ ÇǺ¿ÀÌ´Ù.
SELECT * FROM tCityStat
PIVOT (MAX(value) FOR attr IN ('area' AS area,
'popu' AS popu)) pvt;
attr Ä÷³ÀÇ area, popu°ª¿¡
´ëÇØ ÇǺ¿ÇÏ¸é ¸éÀû, Àα¸¸¦ ¿·Î º¯È¯ÇÏ°í µµ½Ã¸íÀ¸·Î ±×·ìÇÎÇÑ´Ù. MAX
ÇÔ¼ö·Î Áý°èÇÏ¿© Ȥ½Ã °°Àº µµ½Ã¿¡ ´ëÇØ ¸éÀûÀ̳ª Àα¸ Á¤º¸°¡ µÎ °³ ÀÌ»óÀÌ¸é ±× Áß ÃÖ´ë°ªÀ» ÃëÇÑ´Ù.
ȫõÀº ¸éÀû Á¤º¸¸¸ ÀÖ°í Àα¸ Á¤º¸°¡ ¾ø¾î NULLÀÌ´Ù.
ÇǺ¿ ´ë»óÀÌ ¾Æ´Ñ Áö¿ª±¸ °³¼ö, °¡±¸¼ö ¼Ó¼ºÀº Áý°è¿¡¼ Á¦¿ÜÇÑ´Ù. ¾Æ¹«¸® ¼Ó¼ºÀÌ ¸¹¾Æµµ IN ¸ñ·Ï¿¡¼ ¹àÈù °ª¸¸ ¿·Î ÀüȯÇÑ´Ù. ÇǺ¿ °á°ú´Â ÇϳªÀÇ Å×À̺íÀÌ¸ç °ü½É ÀÖ´Â µÎ ¼Ó¼ºÀ» ÇÑ ·¹ÄÚµå·Î ¸ð¾Ò´Ù. ÀÌÁ¦
ÀÌ µÎ ¼Ó¼ºÀ» ¿¬»êÇÏ¿© ÇÊ¿äÇÑ °ªÀ» ¸¸µé¸é µÈ´Ù.
SELECT name, ROUND(popu * 10000 / area, 2) AS Àα¸¹Ðµµ FROM
(
SELECT * FROM tCityStat
PIVOT (MAX(value) FOR attr IN ('area' AS area, 'popu' AS popu)) pvt
) A;
ÇǺ¿¹®À» ¼ºêÄõ¸®·Î °¨½Î°í °á°ú Å×ÀÌºí¿¡¼ area¿Í popu¸¦ ¿¬»êÇÏ¿© Àα¸¹Ðµµ¸¦ °è»êÇÑ´Ù. Àα¸°¡ ¸¸¸í ´ÜÀ§¿©¼ 10000À» °öÇÑ ÈÄ ¸éÀûÀ¸·Î ³ª´©°í ¼Ò¼öÁ¡ ÀÌÇÏ 2ÀÚ¸®±îÁö¸¸ ÃëÇß´Ù. ȫõÀº Àα¸ Á¤º¸°¡ ¾ø¾î Àα¸¹Ðµµ¸¦ ±¸ÇÒ ¼ö ¾ø´Ù. ÇÊ¿äÇÑ °ªÀÌ
¾ø´Â µµ½Ã¸¦ Á¦¿ÜÇÏ·Á¸é PIVOT¹® ¾Æ·¡¿¡ WHERE Á¶°ÇÀ»
ÁöÁ¤ÇÑ´Ù.
WHERE popu IS NOT NULL AND area IS NOT NULL
Àα¸¿Í ¸éÀûÁß Çϳª¶óµµ NULLÀ̸é Àα¸¹Ðµµ¸¦ ±¸ÇÒ ¼ö ¾ø´Ù. ¼¼·Î·Î ³ª¿µÇ¾î ÀÖ´Â ºÐ¸®µÈ °ªÀ» ¿¬»êÇÏ·Á¸é ÇÑ ÇàÀ¸·Î ¸ðÀ¸±â À§ÇØ ÇǺ¿ÀÌ ²À ÇÊ¿äÇÏ´Ù. ÇǺ¿À» È°¿ëÇÏ´Â ÀüÇüÀûÀÎ ¿¹ÀÌ´Ù.
UNPIVOTÀº ÇǺ¿ÀÇ ¹Ý´ë µ¿ÀÛÀ» ¼öÇàÇÑ´Ù. ÇǺ¿ÀÌ °ªÀ» ¿·Î ¹Ù²Ù´Âµ¥ ºñÇØ ¾ðÇǺ¿Àº ¿À» °ªÀ¸·Î º¯È¯ÇÏ¿© ·¹Äڵ忡 ±â·ÏÇÑ´Ù. ±âº» Çü½ÄÀº ´ÙÀ½°ú °°´Ù.
UNPIVOT (°ªÄ÷³ FOR ´ë»óÄ÷³
IN (¾ðÇǺ¿ ´ë»ó Ä÷³ ¸ñ·Ï))
UNPIVOTÀ» ½Ç½ÀÇØ º¸·Á¸é ÇǺ¿ÇØ ³õÀº Å×À̺íÀÌ ÀÖ¾î¾ß ÇÑ´Ù. ´ÙÀ½ ¸í·ÉÀ¸·Î ¾Õ¿¡¼ ½Ç½ÀÇß´ø ÇǺ¿ÀÇ °á°ú¼ÂÀ» tSeasonPivot Å×À̺í·Î
ÀúÀåÇÑ´Ù.
CREATE TABLE tSeasonPivot AS
SELECT * FROM tSeason
PIVOT (SUM(sale) FOR season IN ('º½' AS º½, '¿©¸§' AS ¿©¸§, '°¡À»' AS °¡À», '°Ü¿ï' AS °Ü¿ï));
Çʵå¸í¿¡ µû¿ÈÇ¥¸¦ ¾ø¾Ö±â À§ÇØ ÀÏÀÏÀÌ º°¸íÀ» ÁÖ¾ú´Ù. SQL Server¿¡¼´Â
´ÙÀ½ ¸í·ÉÀ¸·Î ÇǺ¿ °á°ú¼ÂÀ» ÀúÀåÇÑ´Ù. ÇǺ¿¹®µµ ¾à°£ Â÷ÀÌ°¡ ÀÖÁö¸¸ Å×À̺íÀÇ »çº»À» ¸¸µå´Â ¸í·Éµµ ¿ÏÀüÈ÷
´Ù¸£´Ù.
SELECT * INTO tSeasonPivot FROM tSeason
PIVOT (SUM(sale) FOR season IN (º½, ¿©¸§, °¡À», °Ü¿ï)) pvt;
ÇǺ¿ÇÑ Å×À̺íÀ» ´Ù½Ã ¿ø·¡´ë·Î µ¹¸± ¶§ UNPIVOT ¸í·ÉÀ» »ç¿ëÇÑ´Ù.
SELECT * FROM tSeasonPivot
UNPIVOT (sale FOR season IN (º½, ¿©¸§, °¡À», °Ü¿ï)) unpvt;
º½, ¿©¸§, °¡À», °Ü¿ï Çʵ带 season ÇʵåÀÇ °ªÀ¸·Î ¸¸µé°í °èÀýº° ÆǸŷ®ÀÎ °ªÀº
sale Çʵå·Î ¸¸µç´Ù. ¿øº»°ú ÇǺ¿, ¾ðÇǺ¿¿¡ ÀÇÇØ Å×À̺íÀÌ ´ÙÀ½°ú °°ÀÌ ¹Ù²ï´Ù.
½Ç½ÀÀ» À§ÇØ Àӽà Å×À̺í±îÁö ¸¸µå´Â °ÍÀº ³Ê¹« ¹ø°Å·Ó´Ù. ÇǺ¿ °á°ú¸¦
ÀζóÀκä·Î ¸¸µç ÈÄ ´Ù½Ã ÇǺ¿Çصµ °á°ú´Â °°´Ù. SQL Server´Â ÇǺ¿½Ã °ª ¸ñ·ÏÀÇ º°¸í¸¸ »ý·«Çϸé
µÈ´Ù.
SELECT * FROM
(
SELECT * FROM tSeason
PIVOT (SUM(sale) FOR season IN
('º½' AS º½, '¿©¸§' AS ¿©¸§, '°¡À»' AS °¡À», '°Ü¿ï' AS °Ü¿ï)) pvt
) A
UNPIVOT (sale FOR season IN (º½, ¿©¸§, °¡À», °Ü¿ï)) unpvt;
ÇǺ¿Çß´Ù°¡ ¾ðÇǺ¿ÇÏ¸é ·¹ÄÚµåÀÇ ¼ø¼°¡ Á¶±Ý¾¿ ¹Ù²ð ¼ö´Â ÀÖÁö¸¸ °á±¹ ³»¿ëÀº °°´Ù. UNPIVOT¹®¿¡¼ saleÀ̳ª season
Ä÷³¸íÀº ¾îµð±îÁö³ª ÀÓÀÇ°ªÀÌ¸ç ¿øº»°ú ´Þ¶óµµ »ó°ü¾ø´Ù. ÇǺ¿ °úÁ¤¿¡¼ sale, season Çʵå¸íÀº »ç¶óÁ® ¹ö·Á ¾ðÇǺ¿ÇÒ ¶§ ´Ù½Ã Ä÷³¸íÀ» ¿øÇϴ´ë·Î ÁöÁ¤ÇÏ¸é µÈ´Ù.
Áߺ¹ÀÌ ¾ø¾ú´ø tSeason Å×À̺íÀº ¾ðÇǺ¿ÇÏ¸é ¿ø·¡ °ªÀ» ´Ù ãÀ»
¼ö ÀÖÁö¸¸ Áý°è ÇÔ¼ö¸¦ Àû¿ëÇÏ¿© ÇǺ¿ÇÑ °á°ú¼ÂÀº ¿ø·¡ °ªÀ» ãÀ» ¼ö ¾ø´Ù. tSeason2¿¡ ´ëÇØ ÇǺ¿Çß´Ù°¡
¾ðÇǺ¿À» ¼öÇàÇØ º¸ÀÚ. À§ Äõ¸®¹®ÀÇ tSeasonÀÇ À̸§¸¸
tSeason2·Î º¯°æÇÏ¸é µÈ´Ù.
¿ø·¡ Å×À̺íÀÇ Â«»Í °Ü¿ï ÆǸŷ® 2°³¸¦ ÇÕÃÄ 70À¸·Î ÇǺ¿Çß´Ù. ÀÌ·¸°Ô ÇÕÃĹö¸° °ªÀº ¿ø·¡ÀÇ ÆǸŷ®À» ¾Ë ¼ö ¾ø¾î
¾ðÇǺ¿Çϸé ÇÕÃÄÁø 70À¸·Î¸¸ ³ª¿Â´Ù. 30 + 40À» 70À¸·Î Áý°èÇØ ¹ö¸®¸é ¿ø·¡ 30 + 40À̾ú´ÂÁö 40 + 30À̾ú´ÂÁö ¶Ç´Â 10 + 20 + 15 + 25¿´´ÂÁö ¾Ë
¹æ¹ýÀÌ ¾ø´Ù.
±×·¡¼ UNPIVOTÀº PIVOTÀÇ
¿ÏÀüÇÑ ¹Ý´ë ¿¬»êÀÚ´Â ¾Æ´Ï´Ù. ÇÕÃÆ´Ù°¡ ´Ù½Ã µÇµ¹¸°´Ù°í Çؼ ¿ø·¡°ªÀ» ±¸ÇÏÁö ¸øÇÏ´Â °ÍÀº ¼öÇÐÀûÀ¸·Î
Áö±ØÈ÷ ´ç¿¬ÇÑ Çö»óÀÌ´Ù. µ¿ÀÛ¸¸ ¹Ý´ëÀÏ »Ó ¿ø·¡ÀÇ °á°ú¼ÂÀº Á¤È®È÷ ¾Ë ¼ö ¾ø´Ù.