복붙노트

[SQL] 한 열에서 여러 행을 삽입하는 방법 [마감]

SQL

한 열에서 여러 행을 삽입하는 방법 [마감]

나는 하나 개의 컬럼에 여러 행을 삽입 할.

이처럼 내 POS 시스템의 경우.

표 A :

Transaction ID| Item Code|Qty|Total|Transaction Date|
-----------------------------------------------------
00001         |  Item 1  |3  |100  |12/07/2014      |
00001         |  Item 2  |2  |50   |12/07/2014      | 
00001         |  Item 3  |1  |150  |12/07/2014      |

그 후 나는 내 테이블이보고 싶어

Transaction ID|Item Code             |Total of Qty|Total of Price|Transaction Date|
-----------------------------------------------------------------------------------
00001         |Item 1, Item 2, Item 3|      6     |      150     | 12/07/2014     |

해결법

  1. ==============================

    1.사용 GROUP_CONCAT 그룹에 의해에서 함께 CONCATENATE 문자열에 :

    사용 GROUP_CONCAT 그룹에 의해에서 함께 CONCATENATE 문자열에 :

    SELECT TransactionID, GROUP_CONCAT(ItemCode) AS ItemCodes,  
           SUM(Qty) AS TotalofQty, SUM(Total) AS TotalPrice, TransactionDate
    FROM TableA
    GROUP BY TransactionID, TransactionDate;
    

    여기 SqlFiddle

    편집 SQLSERVER에 RDBMS를 변경 한 후, 해킹은 GROUP_CONCAT 같은 기능을 접는 문자열의 SQLSERVER의 부족을 보상하기 위해 필요합니다. 다음은 XML의 PATH 하나에 대한 물건 /의 :

    SELECT a.[Transaction ID], 
    
            STUFF((
              SELECT ',' + [Item Code]
              FROM TableA
              WHERE [Transaction ID] = a.[Transaction ID]
              FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 1, '')
         AS ItemCodes,  
           SUM(Qty) AS TotalofQty, SUM(Total) AS TotalPrice, [Transaction Date]
    FROM TableA a
    GROUP BY a.[Transaction ID], a.[Transaction Date];
    

    수동으로 각각의 외부 쿼리와 함께 물건 하위 쿼리 상관 관계를해야합니다.

    SQLSERVER 바이올린

  2. ==============================

    2.거기에는 빌드 - SQL Server의 CONCAT 기능이없고 나는 그런있을 것입니다 의심 사실이다. 그 이유는 사용자 정의 집계 CLR은을 만드는 데 매우 간단하다. 사실, 이미 MSDN에 예있다. 당신이 GROUP_CONCAT 함수를 만들 필요가 모든 여기에서 찾을 수 있습니다 - 문자열 유틸리티 함수를.

    거기에는 빌드 - SQL Server의 CONCAT 기능이없고 나는 그런있을 것입니다 의심 사실이다. 그 이유는 사용자 정의 집계 CLR은을 만드는 데 매우 간단하다. 사실, 이미 MSDN에 예있다. 당신이 GROUP_CONCAT 함수를 만들 필요가 모든 여기에서 찾을 수 있습니다 - 문자열 유틸리티 함수를.

    기본적으로, 당신은 아래의 단계를 수행합니다 :

    그런 다음 표준 집계 함수로이 기능을 사용할 수 있습니다 :

    SELECT TransactionID, [dbo].Concatenate(ItemCode) AS ItemCodes,  
           SUM(Qty) AS TotalofQty, SUM(Total) AS TotalPrice, TransactionDate
    FROM TableA
    GROUP BY TransactionID, TransactionDate;
    

    참고, 나는 몇 년 동안 CLR 통합에 대한 알려져 있지만 몇 달 전에 그것을 사용하기 시작했다. 당신은 대량의 데이터 수집 작업 할 때 성능 차이는 크다.

  3. from https://stackoverflow.com/questions/27340688/how-to-insert-multiple-row-from-one-column by cc-by-sa and MIT license