Как повернуть два столбца в моем запросе SQL - PullRequest
0 голосов
/ 12 февраля 2019

Этот запрос почти там.единственная проблема, которую я имею сейчас, состоит в том, что результаты не вращаются.вместо этого они остаются в столбце с именем Value.

SELECT * FROM (ВЫБЕРИТЕ jD.AccountID, SUM (jD.Amount) AS [Всего долларов], COA.Name как COAName, SUM (jD.Qty) AS QTY, CONVERT (date, GETDATE ())как дата, AttributeDefinitions.Name, AttributeValues.Value ОТ AttributeDefinitions INNER JOIN AttributeCategories НА AttributeDefinitions.AttributeCategoryID = AttributeCategories.AttributeCategoryID INNER JOIN AttributeValues ​​НА AttributeDefinitions.AttributeDefinitionID = AttributeValues.AttributeDefinitionID правого внешнего соединения JnlDetails КАК Jd С (NOLOCK) INNER JOIN COA ПО Jd.AccountID = COA.AccountID ON AttributeValues.AttributeValueGroupID = COA.AttributeValueGroupID WHERE (jD.CreateDate> = GETDATE () - 2) И (jD.CreateDate

) как T1 PIVOT (MAX ([Имя]) ДЛЯ ИМЕНИ IN ([ACCT_NO], [DEPT_ID], [GLENTRY_CLASSID], [GLENTRY_PJJ][GLDIMBENEFITING_DEPARTMENT], [GLDIMFUND], [LOCATION_ID])) PT

Ответы [ 2 ]

0 голосов
/ 12 февраля 2019

Обратите внимание, что результаты могут отличаться, поэтому я могу иметь 3 столбца или 4, 5 и т. Д. ... до 10 столбцов

Тогда вам нужен динамический SQL

DECLARE @Attributes VARCHAR(MAX), @SQL VARCHAR(MAX)

SELECT @Attributes = STUFF((SELECT ',' + QUOTENAME(Name) 
                    FROM AttributeDefinitions
            FOR XML PATH(''), TYPE
            ).value('.', 'VARCHAR(MAX)') 
        ,1,1,'')

SET @SQL = '
SELECT * FROM (
    SELECT
        jD.AccountID, 
        SUM(jD.Amount) AS [Total Dollars], 
        COA.Name, 
        SUM(jD.Qty) AS QTY, 
        CONVERT(date, GETDATE()) AS Date, 
        AttributeDefinitions.Name, 
        AttributeValues.Value
    FROM
        AttributeDefinitions INNER JOIN
        AttributeCategories ON AttributeDefinitions.AttributeCategoryID = AttributeCategories.AttributeCategoryID INNER JOIN
        AttributeValues ON AttributeDefinitions.AttributeDefinitionID = AttributeValues.AttributeDefinitionID RIGHT OUTER JOIN
        JnlDetails AS jD WITH (NOLOCK) INNER JOIN
        COA ON jD.AccountID = COA.AccountID ON AttributeValues.AttributeValueGroupID = COA.AttributeValueGroupID
    WHERE
        (jD.CreateDate >= GETDATE() - 2) AND 
        (jD.CreateDate < GETDATE() + 1)
    GROUP BY 
        jD.AccountID, 
        COA.Name, 
        jD.Qty, 
        jD.CreateDate, 
        AttributeDefinitions.Name, 
        AttributeDefinitions.Description, 
        AttributeValues.Value
    ORDER BY 
        jD.AccountID
) T
PIVOT
(
   MAX([Name]) FOR Name IN (' + @Attributes + ')
) PT
'

EXEC(@SQL);
0 голосов
/ 12 февраля 2019

Это то, что вы ищете?

SELECT * FROM (
    SELECT
        jD.AccountID, 
        SUM(jD.Amount) AS [Total Dollars], 
        COA.Name, 
        SUM(jD.Qty) AS QTY, 
        CONVERT(date, GETDATE()) AS Date, 
        AttributeDefinitions.Name, 
        AttributeValues.Value
    FROM
        AttributeDefinitions INNER JOIN
        AttributeCategories ON AttributeDefinitions.AttributeCategoryID = AttributeCategories.AttributeCategoryID INNER JOIN
        AttributeValues ON AttributeDefinitions.AttributeDefinitionID = AttributeValues.AttributeDefinitionID RIGHT OUTER JOIN
        JnlDetails AS jD WITH (NOLOCK) INNER JOIN
        COA ON jD.AccountID = COA.AccountID ON AttributeValues.AttributeValueGroupID = COA.AttributeValueGroupID
    WHERE
        (jD.CreateDate >= GETDATE() - 2) AND 
        (jD.CreateDate < GETDATE() + 1)
    GROUP BY 
        jD.AccountID, 
        COA.Name, 
        jD.Qty, 
        jD.CreateDate, 
        AttributeDefinitions.Name, 
        AttributeDefinitions.Description, 
        AttributeValues.Value
    ORDER BY 
        jD.AccountID
) as T1
PIVOT
(
   MAX([Name]) FOR Name IN ([Account Code], [Project Code], [Fund])
) PT
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...