저장 프로 시저 쿼리에서 새 열을 정의하는 방법

yuro

피벗 테이블을 실현하는 저장 프로 시저가 있습니다. Select진술은 변수에 정의되었습니다 @query.

다음은 코드입니다.

BEGIN
    SET NOCOUNT ON;

    DECLARE @colNo nvarchar(max)
    DECLARE @query nvarchar(max)

    SET NOCOUNT ON;

    WITH vals AS (
        SELECT DISTINCT t.No
        FROM QR_Tests t
    )

    SELECT @colNo = COALESCE(@colNo + ', ', '') + '['+ No +']'
    FROM vals
    ORDER BY No

    SET @query = 'SELECT *
                  FROM (
                    SELECT 
                        CASE WHEN GROUPING(No) = 0
                            THEN CAST(No as CHAR(12))
                        ELSE [ALL]
                        END As No,
                        CASE WHEN GROUPING(quote) = 0
                            THEN CAST(quote as CHAR(7))
                        ELSE [ALL]
                        END As Quote
                    FROM QRTestView
                    WHERE datum >= @from_val and datum <= @to_val
                    GROUP BY No, Quote WITH CUBE) AS sel
                    PIVOT (
                        COUNT(Quote)
                        FOR No IN ('+ @colNo +', [ALL])
                    ) AS p'

    EXEC sp_executesql @query, N'@from_val datetime, @to_val datetime', @from_val = @from, @to_val = @to
END

실제로 다음 결과가 필요합니다.

| Quote | DE10101 | DE10121 | DE22034 | ... | ALL
|  100  |    2    |    0    |    3    | ... |  5
|   99  |    0    |    4    |    3    | ... |  7
|   98  |    5    |    1    |    7    | ... | 13
|   90  |    0    |    0    |    1    | ... |  1
|   50  |   12    |   10    |    4    | ... | 26
|  ALL  |   19    |   15    |   18    | ... | 52

블로그 에서 예제를 시도했습니다 . 저장 프로 시저를 실행하면 오류 메시지가 나타납니다.

잘못된 열 이름 'ALL'.

내 결과에 대해이 새 열을 어떻게 정의 할 수 있습니까?


업데이트 : 변환을 이해하기 위해 여기에 소스 테이블이 있습니다.

| No      | Quote | Datum
| DE10101 | 100   | 2016-01-01
| DE10121 | 100   | 2016-01-02
| DE10101 | 100   | 2016-01-05
| DE22034 | 98    | 2016-01-05
| DE10101 | 98    | 2016-01-10
| DE10121 | 80    | 2016-01-10
| DE22034 | 98    | 2016-01-10
| DE22034 | 80    | 2016-01-11
| DE10101 | 100   | 2016-01-20
| DE10121 | 80    | 2016-01-21

결과는 다음과 같습니다.

| Quote | DE10101 | DE10121 | DE22034 | ALL
| 100   |    3    |    1    |    0    |  4
|  98   |    1    |    0    |    2    |  3
|  80   |    0    |    2    |    1    |  3
| ALL   |    4    |    3    |    3    | 10   

현재 저장 프로시 저는 모든 No.

gofr1

내가 이해 ALL하는대로이 행의 모든 ​​값의 합계입니다. 따라서 제공 한 데이터를 기반으로 SP 코드를 다시 작성해야합니다.

BEGIN
    SET NOCOUNT ON;

    DECLARE @colNo nvarchar(max)
    DECLARE @colSum nvarchar(max) -- this will store [Column1]+[Column2] etc
    DECLARE @query nvarchar(max)

    SET NOCOUNT ON;

    WITH vals AS (
        SELECT DISTINCT t.No
        FROM QR_Tests t
    )

    SELECT  @colNo = COALESCE(@colNo + ', ', '') + QUOTENAME([No]),
            @colSum = COALESCE(@colSum + '+ ', '') + QUOTENAME([No])
    FROM vals
    ORDER BY [No]
    -- add this column here
    SET @query = 'SELECT *
                  FROM (
                    SELECT *, '+@colSum+' as [ALL] 
                    FROM (
                        SELECT 
                            CAST([No] as CHAR(12)) As No,
                            CAST(quote as CHAR(7)) As Quote,
                            CAST(quote as CHAR(7)) As Q
                        FROM QRTestView
                        WHERE datum >= @from_val and datum <= @to_val
                        ) AS sel
                    PIVOT (
                        COUNT(Q) FOR No IN ('+ @colNo +')
                    ) AS p
                    UNION ALL
                    SELECT ''ALL'',*, '+@colSum+'[ALL] 
                    FROM (
                        SELECT 
                            CAST([No] as CHAR(12)) As No,
                            COUNT(CAST(quote as CHAR(7))) As Quote,
                        FROM QRTestView
                        WHERE datum >= @from_val and datum <= @to_val
                        GROUP BY CAST([No] as CHAR(12))
                        ) AS sel
                    PIVOT (
                        MAX(Quote) FOR [No] IN ('+ @colNo +')
                    ) AS p
               ) as d
               ORDER BY CASE WHEN Quote = ''ALL'' THEN 0 ELSE CAST(Quote as int) END DESC'

    EXEC sp_executesql @query, N'@from_val datetime, @to_val datetime', @from_val 
END

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

MySQL 저장 프로 시저의 IN 문 내에서 쿼리 문자열을 사용하는 방법

분류에서Dev

저장 프로 시저의 출력 변수에 쿼리 값을 설정하는 방법

분류에서Dev

저장 프로 시저에서 xml을 반복하는 방법

분류에서Dev

저장 프로 시저의 고정 너비 파일에서 열을 추출하는 방법

분류에서Dev

동일한 저장 프로 시저에서 열 값을 참조하는 방법

분류에서Dev

사용자 정의 형식의 배열을 저장 프로 시저에 전달하는 방법

분류에서Dev

저장 프로 시저에서 값을 가져 오는 방법

분류에서Dev

C #의 저장 프로 시저에서 설정 값을 가져 오는 방법

분류에서Dev

Postgres에서 업데이트하기 전에 특정 열의 기록을 저장하는 저장 프로 시저를 만드는 방법

분류에서Dev

저장 프로 시저를 사용하여 루프에서 SQL 열의 값을 구문 분석하는 방법

분류에서Dev

저장 프로 시저에서 문자열을 정수로 변환하는 방법

분류에서Dev

SQL Server 2012의 저장 프로 시저에서 동적으로 테이블 이름을 지정하는 방법

분류에서Dev

SQL의 저장 프로 시저에 null 값을 전달하는 방법

분류에서Dev

저장 프로 시저에서 특정 문자열 항목을 검색하는 방법

분류에서Dev

DocumentDB의 저장 프로 시저 내에서 "피드 옵션"을 설정하는 방법은 무엇입니까?

분류에서Dev

AWS RedShift에서 모든 저장 프로 시저를 나열하는 방법

분류에서Dev

SQLServer 저장 프로 시저에서 case 문을 사용하는 방법

분류에서Dev

저장 프로 시저에서 유사한 구문을 사용하는 방법

분류에서Dev

MySql 저장 프로 시저의 변수에 쿼리 결과를 저장하는 방법

분류에서Dev

VueJ의 로컬 저장소에서 새로 생성 된 행을 '감시'하는 방법은 무엇입니까?

분류에서Dev

Oracle Apex 페이지에서 Oracle 저장 프로 시저로 값 배열을 전달하는 방법

분류에서Dev

Oracle 저장 프로 시저에서 여러 열을 사용하여 선택하는 방법

분류에서Dev

저장 프로 시저에서 반환 값을 가져 오는 방법

분류에서Dev

저장 프로 시저에서 테이블을 만드는 방법?

분류에서Dev

C #에서 Oracle 저장 프로 시저 표준 출력을 얻는 방법

분류에서Dev

테이블의 각 열 값을 저장 프로 시저로 전달하고 결과를 SQL-Server의 테이블에 저장하는 방법

분류에서Dev

새 데이터베이스 끝점을 사용하여 Mule 3.5에서 저장 프로 시저를 호출하는 방법

분류에서Dev

저장 프로 시저를 사용하지 않고 모든 테이블에서 문자열을 찾는 방법

분류에서Dev

새 호출을 취소하지 않고 저장 프로 시저를 잠그는 방법

Related 관련 기사

  1. 1

    MySQL 저장 프로 시저의 IN 문 내에서 쿼리 문자열을 사용하는 방법

  2. 2

    저장 프로 시저의 출력 변수에 쿼리 값을 설정하는 방법

  3. 3

    저장 프로 시저에서 xml을 반복하는 방법

  4. 4

    저장 프로 시저의 고정 너비 파일에서 열을 추출하는 방법

  5. 5

    동일한 저장 프로 시저에서 열 값을 참조하는 방법

  6. 6

    사용자 정의 형식의 배열을 저장 프로 시저에 전달하는 방법

  7. 7

    저장 프로 시저에서 값을 가져 오는 방법

  8. 8

    C #의 저장 프로 시저에서 설정 값을 가져 오는 방법

  9. 9

    Postgres에서 업데이트하기 전에 특정 열의 기록을 저장하는 저장 프로 시저를 만드는 방법

  10. 10

    저장 프로 시저를 사용하여 루프에서 SQL 열의 값을 구문 분석하는 방법

  11. 11

    저장 프로 시저에서 문자열을 정수로 변환하는 방법

  12. 12

    SQL Server 2012의 저장 프로 시저에서 동적으로 테이블 이름을 지정하는 방법

  13. 13

    SQL의 저장 프로 시저에 null 값을 전달하는 방법

  14. 14

    저장 프로 시저에서 특정 문자열 항목을 검색하는 방법

  15. 15

    DocumentDB의 저장 프로 시저 내에서 "피드 옵션"을 설정하는 방법은 무엇입니까?

  16. 16

    AWS RedShift에서 모든 저장 프로 시저를 나열하는 방법

  17. 17

    SQLServer 저장 프로 시저에서 case 문을 사용하는 방법

  18. 18

    저장 프로 시저에서 유사한 구문을 사용하는 방법

  19. 19

    MySql 저장 프로 시저의 변수에 쿼리 결과를 저장하는 방법

  20. 20

    VueJ의 로컬 저장소에서 새로 생성 된 행을 '감시'하는 방법은 무엇입니까?

  21. 21

    Oracle Apex 페이지에서 Oracle 저장 프로 시저로 값 배열을 전달하는 방법

  22. 22

    Oracle 저장 프로 시저에서 여러 열을 사용하여 선택하는 방법

  23. 23

    저장 프로 시저에서 반환 값을 가져 오는 방법

  24. 24

    저장 프로 시저에서 테이블을 만드는 방법?

  25. 25

    C #에서 Oracle 저장 프로 시저 표준 출력을 얻는 방법

  26. 26

    테이블의 각 열 값을 저장 프로 시저로 전달하고 결과를 SQL-Server의 테이블에 저장하는 방법

  27. 27

    새 데이터베이스 끝점을 사용하여 Mule 3.5에서 저장 프로 시저를 호출하는 방법

  28. 28

    저장 프로 시저를 사용하지 않고 모든 테이블에서 문자열을 찾는 방법

  29. 29

    새 호출을 취소하지 않고 저장 프로 시저를 잠그는 방법

뜨겁다태그

보관