如何从表中获取描述?

时间:2012-10-12 13:13:43

标签: sql sql-server sql-server-2008 pivot pivot-table

我在@Blue Feet的帮助下得到了这个查询。但是下面的查询我有实例类型,除了我需要来自另一个表的实例类型描述。所以我需要用额外的两个表进行连接。

Table - RelationShips:
------------------------
Table Name                          Column Name                 Key
CSPGI50_VALID_INSTANCE_TYPE         CSPGI50_INSTANCE_TYPE_C     Primary
CSPGJ02_MSG_OBJ                     CSPGJ02_MSG_K               Primary 
CSPGI03_MANUAL_ASN                  CSPGI03_ASN_C                primary
CSPGJ03_MSG_TRANSLN                 CSPGJ03_LOCALE_C              primary   

Column Having tables:
------------------------------
CSPGI50_VALID_INSTANCE_TYPE(CSPGJ02_MSG_K,CSPGI50_INSTANCE_TYPE_C)
CSPGJ03_MSG_TRANSLN(CSPGJ02_MSG_K)
CSPGI03_MANUAL_ASN(CSPGI03_INSTANCE_TYPE_C)
CSPGJ02_MSG_OBJ(CSPGJ02_MSG_K)

我有以下查询,

SET DATEFIRST 1  
SELECT 
    case when InstanceType is not null then InstanceType else 'Sum' End InstanceType , 
    sum([39]) AS FirstWeek, 
    sum([38]) AS SecondWeek,   
    sum([37]) AS ThirdWeek, 
    sum([36]) AS FourthWeek, 
    sum([35]) AS FifthWeek, 
    sum([34]) AS SixthWeek  
FROM 
(
    SELECT [SPGI03_INSTANCE_TYPE_C] AS InstanceType, 
        [39], [38], [37], [36], [35], [34]  
    FROM 
    ( 
        SELECT I03.[SPGI03_INSTANCE_TYPE_C],  
            DatePart(wk, I03.[SPGI03_CREATE_S]) WeekNo, 
            DATEADD(DAY, 7 -DATEPART(WEEKDAY,I03.[SPGI03_CREATE_S]),
            I03.[SPGI03_CREATE_S]) WeekEnd  
        FROM [SUPER-G].[dbo].[CSPGI03_MANUAL_ASN] I03, [SUPER-G].[dbo].[CSPGI50_VALID_INSTANCE_TYPE] I50  
        where I50.[SPGI50_INSTANCE_TYPE_C] = I03.[SPGI03_INSTANCE_TYPE_C] 
            and  I50.[SPGA04_RATING_ELEMENT_D] = 2 
            and I03.[SPGI03_EXCEPTIONED_F] = 'N'  
            and I03.[SPGI03_DISPUTED_F] != 'Y'  
            and I03.[SPGI03_CREATE_S] between '08-19-2012 12:00:00.000' AND DATEADD(day , 7, '09-30-2012 11:59:59.000' 
    )) x 
    pivot 
    ( 
        count(WeekEnd) 
        FOR weekno IN ([39], [38], [37], [36], [35], [34])  
    ) p 
) x1 
GROUP BY  InstanceType WITH ROLLUP

我想要的是什么:

我想从

添加实例类型描述
Table 2-column name([SPGJ03_MSG_TRANSLN_X])

如果您有疑问,请参阅我之前的查询链接 How to group by the each week upto last six week sundays dates in sql?

1 个答案:

答案 0 :(得分:0)

很难说出这些表是如何相关的,但看起来你想做这样的事情:

SET DATEFIRST 1  
SELECT 
    case when InstanceType is not null then InstanceType else 'Sum' End InstanceType , 
    sum([39]) AS FirstWeek, 
    sum([38]) AS SecondWeek,   
    sum([37]) AS ThirdWeek, 
    sum([36]) AS FourthWeek, 
    sum([35]) AS FifthWeek, 
    sum([34]) AS SixthWeek,
    max(InstanceDescription)
FROM 
(
    SELECT [SPGI03_INSTANCE_TYPE_C] AS InstanceType, 
        [39], [38], [37], [36], [35], [34], InstanceDescription
    FROM 
    ( 
        SELECT I03.[SPGI03_INSTANCE_TYPE_C],  
            DatePart(wk, I03.[SPGI03_CREATE_S]) WeekNo, 
            DATEADD(DAY, 7 -DATEPART(WEEKDAY,I03.[SPGI03_CREATE_S]),
            I03.[SPGI03_CREATE_S]) WeekEnd,
            J03.SPGJ03_MSG_TRANSLN_X InstanceDescription
        FROM [SUPER-G].[dbo].[CSPGI03_MANUAL_ASN] I03
        INNER JOIN [SUPER-G].[dbo].[CSPGI50_VALID_INSTANCE_TYPE] I50  
          ON I50.[SPGI50_INSTANCE_TYPE_C] = I03.[SPGI03_INSTANCE_TYPE_C] 
        LEFT JOIN CSPGJ02_MSG_OBJ J02
          ON I50.SPGJ02_MSG_K = J02.SPGJ02_MSG_K
        LEFT JOIN CSPGJ03_MSG_TRANSLN J03
          ON J02.SPGJ02_MSG_K = J03.SPGJ02_MSG_K
        where I50.[SPGA04_RATING_ELEMENT_D] = 2 
            and I03.[SPGI03_EXCEPTIONED_F] = 'N'  
            and I03.[SPGI03_DISPUTED_F] != 'Y'  
            and I03.[SPGI03_CREATE_S] between '08-19-2012 12:00:00.000' AND DATEADD(day , 7, '09-30-2012 11:59:59.000' 
    )) x 
    pivot 
    ( 
        count(WeekEnd) 
        FOR weekno IN ([39], [38], [37], [36], [35], [34])  
    ) p 
) x1 
GROUP BY  InstanceType WITH ROLLUP