2017-10-20 97 views
-3

我已经编辑我的查询象下面这样:在发生需要帮助值

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 
+2

请标记您正在使用的正确数据库。MySQL,SQL-server和SQLite是不一样的。 –

+0

如果您要提供样本数据(例如插入语句或使用with子句),这也会有所帮助。你有没有尝试过“Group By” - 激情?例如。选择...按TierRating分组。 – Benjamin

+0

欢迎使用StackOverflow:如果您发布代码,XML或数据示例,请***在文本编辑器中突出显示这些行,然后单击编辑器工具栏上的“代码示例”按钮(“{}”)格式和语法突出显示它! –

回答

0

要替换一个值,例如5如果一些现有的值=“0层”你可以使用一个case expression,这可能是这样的:

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 

假设的情况下表达并使用整数1 ,2等然后在最大值到达可以放置这样的MAX()函数内部的整体壳体表达式:

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 

,并纳入它像一个查询的u任何其它列唱一个GROUP BY子句。

+0

感谢您的支持,我对查询进行了更改并编辑了原始问题。你能帮我编辑一下这个问题吗? – Vikas

+0

你的问题现在解决了吗?你仍然有关于这个答案的问题吗?要接受答案“[**点击Tick **](https://ibb.co/ikqyO6)”以获取更多信息,请参阅[help/accepting](https://stackoverflow.com/help/someone-answers) –