Sql 需要帮助生成值吗

Sql 需要帮助生成值吗,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我对我的查询进行了如下编辑: SELECT ser.SERVER_COMPONENT_NAME, ITServ.IT_SERVICE_BUSINESS_CRITICALIT, app.APPCROWNJEWEL, MAX(CASE WHEN ITServ.IT_SERVICE_BUSINESS_CRITICALIT = 'Tier o' THEN 1 WHEN ITServ.IT_SERVICE_BUSINESS_CRITIC

我对我的查询进行了如下编辑:

SELECT
    ser.SERVER_COMPONENT_NAME, ITServ.IT_SERVICE_BUSINESS_CRITICALIT, 
    app.APPCROWNJEWEL,
    MAX(CASE
           WHEN ITServ.IT_SERVICE_BUSINESS_CRITICALIT = 'Tier o' THEN 1
           WHEN ITServ.IT_SERVICE_BUSINESS_CRITICALIT = 'Tier 1' THEN 3
           WHEN ITServ.IT_SERVICE_BUSINESS_CRITICALIT = 'Tier 2' THEN 5
           WHEN ITServ.IT_SERVICE_BUSINESS_CRITICALIT IS NULL THEN 5
           ELSE 0
        END) AS TierRatingValue,
    MAX(CASE   
           WHEN app.APPCROWNJEWEL = 'Yes' THEN 3
           WHEN app.APPCROWNJEWEL = 'No' THEN 2
           ELSE 1
        END) AS JewelsValue
FROM
    TDM_FACT_SERVER ser 
LEFT JOIN 
    TDM_RKT_SM_TO_SERVER smServer ON smServer.SERVER_COMPONENT_ID = Ser.SERVER_COMPONENT_ID
                                  AND smServer.SOFTWARE_MODULE_COMPONENT_ID IN (SELECT DISTINCT sm.SOFTWARE_MODULE_COMPONENT_ID 
                                                                                FROM software_module sm
                                                                                WHERE sm.SOFTWARE_MODULE_COMPONENT_NAME LIKE 'DBSM:%' OR  
                                                                                      sm.SOFTWARE_MODULE_COMPONENT_NAME LIKE 'MWSM:%' OR
                                                                                      sm.SOFTWARE_MODULE_COMPONENT_NAME like 'CMS:%')
LEFT JOIN 
    SOFTWARE_MODULE sm ON sm.SOFTWARE_MODULE_COMPONENT_ID = smServer.SOFTWARE_MODULE_COMPONENT_ID
LEFT JOIN 
    TDM_RKT_IT_SERVICE_TO_SM ITSERVICETOSM ON sm.SOFTWARE_MODULE_COMPONENT_ID = ITSERVICETOSM.SOFTWARE_MODULE_COMPONENT_ID
                                           AND ITSERVICETOSM.IT_SERVICE_COMPONENT_ID IN (SELECT DISTINCT Itserv.IT_SERVICE_COMPONENT_ID
                                                                                         FROM tdm_fact_it_srvc Itserv
                                                                                         WHERE Itserv.IT_SERVICE_SERVICE_RECONCILIAT IN ('Active in PLADA but not present in GSD', 
                                                                                                                                         'Active in GSD but not present in PLADA',
                                                                                                                                         'Active in GSD and PLADA',
                                                                                                                                         'Active in GSD but demised in PLADA',
                                                                                                                                         'Active in PLADA but demised in GSD'))    
LEFT JOIN 
    TDM_FACT_IT_SRVC ITServ ON ITSERVICETOSM.IT_SERVICE_COMPONENT_ID = ITServ.IT_SERVICE_COMPONENT_ID
LEFT JOIN 
    TDM_RKT_APP_TO_ITSERVICE ApptoITService ON ITServ.IT_SERVICE_COMPONENT_ID = ApptoITService.IT_SERVICE_COMPONENT_ID
LEFT JOIN  
    hsbc_ci_inventory_as app ON ApptoITService.APPLICATION_COMPONENT_ID = app.appid
WHERE 
    ser.SERVER_COMPONENT_NAME = 'GBL03427'
GROUP BY 
    ser.SERVER_COMPONENT_NAME, ITServ.IT_SERVICE_BUSINESS_CRITICALIT, 
    app.APPCROWNJEWEL
下面是按预期生成两个新列时的输出

Server          TierRating   Jewels         TierRatingValue      JewelsValue
---------       ----------   ----------     ----------------     -----------
GBL03427          Tier 0     No                 0                    2
GBL03427          Tier 1     Yes                3                    3
GBL03427          Tier 2     Undefined          5                    1
GBL03427          Tier 1     No                 3                    2
GBL03427          Tier 2     No                 5                    2
GBL03427          Tier 0     Yes                0                    3
GBL03427          Tier 1     NULL               3                    1
GBL03427          NULL       NULL               5                    1
GBL03427          Tier 1     Undefined          3                    1
GBL03427          Tier 0     Undefined          0                    1
但我希望将输出视为一行,TierRatingValue和JewelsValue的最大值如下所示

Server      TierRating   Jewels         TierRatingValue      JewelsValue
---------   ----------   ----------     ----------------     -----------
GBL03427    Tier 2       Yes                5                   3

若要替换某个现有值='Tier 0'的值,如5,您将使用一个
大小写表达式
,该表达式可能如下所示:

case
     when TierRating = 'Tier 0' then 1
     when TierRating = 'Tier 1' then 3
     when TierRating = 'Tier 2' then 5
     when TierRating IS NULL then 5
     when TierRating = 'Yes' then 3
     when TierRating = 'No' then 2
     else 1
end AS Tier_Rank
MAX(
    case
         when TierRating = 'Tier o' then 1
         when TierRating = 'Tier 1' then 3
         when TierRating = 'Tier 2' then 5
         when TierRating IS NULL then 5
         when TierRating = 'Yes' then 3
         when TierRating = 'No' then 2
         else 1
    end
    ) AS Tier_Rank
假设case表达式确实使用整数1、2等,那么为了获得最大值,可以将整个case表达式放入MAX()函数中,如下所示:

case
     when TierRating = 'Tier 0' then 1
     when TierRating = 'Tier 1' then 3
     when TierRating = 'Tier 2' then 5
     when TierRating IS NULL then 5
     when TierRating = 'Yes' then 3
     when TierRating = 'No' then 2
     else 1
end AS Tier_Rank
MAX(
    case
         when TierRating = 'Tier o' then 1
         when TierRating = 'Tier 1' then 3
         when TierRating = 'Tier 2' then 5
         when TierRating IS NULL then 5
         when TierRating = 'Yes' then 3
         when TierRating = 'No' then 2
         else 1
    end
    ) AS Tier_Rank

并像使用GROUP BY子句的查询的任何其他列一样合并它。

请标记您正在使用的正确数据库。。MySQL、SQL server和SQLite不一样。如果您提供示例数据(例如,作为insert into语句或with子句),也会有所帮助。你试过“分组依据”-条款吗?例如,选择。。。按分层分组。欢迎使用StackOverflow:如果您发布代码、XML或数据示例,请在文本编辑器中突出显示这些行,然后单击编辑器工具栏上的“代码示例”按钮(
{}
),以很好地格式化和语法突出显示它!你完全改变了这个问题,这是你不应该做的。如有必要,可将原问题添加到问题中;但是,隐藏原始问题会使原始答案显得离题。我认为,这个问题最近的变化应该是一个新问题。另请看关于如何提问的帮助(在脚注中)。我在问题中看到了来自Imran的评论,编辑了相同的内容,这就是我为什么这么做的原因。我是这个页面的新手,我不知道我能不能做到,我很抱歉这么做。你想让我把它创建为一个新问题吗?谢谢你,我已经对查询进行了更改并编辑了原始问题。你能帮我修改一下这个问题吗?你的问题现在解决了吗?你对这个答案还有疑问吗?若要接受答案“”,请参阅