3

私のクエリの結果:

SELECT SYS_Product, 
       CASE 
         WHEN MEMVendor_Name = 'Unavailable' OR MEMVendor_Name = 'unknown' 
           THEN 'Error' 
         ELSE MEMVendor_Name 
       END AS MEMVendor_Name, 
       COUNT(MEMVendor_Name) AS MEMVendor_NameCount
FROM  dbo.ahs_master_bc_system_mem_vendor AS V
WHERE (AHS_CurrentCfg = 1) 
and SYS_Product='Gen8'
GROUP BY SYS_Product, MEMVendor_Name

以下のとおりであります:

SYS_Product | MEMVendor_Name| MEMVendor_NameCount
_____________________________________________
Gen8          Elpida           1
Gen8          Micron           84
Gen8          Nanya            28
Gen8          Netlist          0
Gen8          Samsung          55
Gen8          SK-Hynix         86
Gen8          Error            0 <----
Gen8          Error            2 <----

問題: JUST the Error の "Sum" を 2(0+2​​) にして、他のカウントを維持するにはどうすればよいですか:

SYS_Product | MEMVendor_Name| MEMVendor_NameCount
_____________________________________________
Gen8          Elpida            1
Gen8          Micron            84
Gen8          Nanya             28
Gen8          Netlist           0
Gen8          Samsung           55
Gen8          SK-Hynix          86
Gen8          Error             2 <===

これらの結果は、SYS_Product および MEMVendor_Name に基づく別のクエリと結合されるため、group by が必要です。

ありがとう。

4

3 に答える 3

2

group byすべてのエラーを同等に扱うように変更します。

GROUP BY 
        SYS_Product
,       case 
        when MEMVendor_Name in ('Unavailable', 'unknown') then 'Error' 
        else MEMVendor_Name
        end
于 2012-10-10T18:09:43.417 に答える
1

以下のようにcaseステートメントを追加してみてくださいgroup by

SELECT SYS_Product, 
       CASE 
         WHEN MEMVendor_Name = 'Unavailable' OR MEMVendor_Name = 'unknown' 
           THEN 'Error' 
         ELSE MEMVendor_Name 
      END AS MEMVendor_Name, 
COUNT(MEMVendor_Name) AS MEMVendor_NameCount
FROM dbo.ahs_master_bc_system_mem_vendor AS V
WHERE (AHS_CurrentCfg = 1) 
and SYS_Product='Gen8'
GROUP BY SYS_Product, 
      CASE 
        WHEN MEMVendor_Name = 'Unavailable' OR MEMVendor_Name = 'unknown' 
          THEN 'Error' 
        ELSE MEMVendor_Name 
      END
于 2012-10-10T18:11:37.820 に答える
0

句内の名前ではなく、列の位置を参照するだけです。GROUP BY

SELECT
    SYS_Product, 
    CASE 
        WHEN MEMVendor_Name in ('Unavailable', 'unknown') THEN 'Error'
        ELSE MEMVendor_Name
    END AS MEMVendor_Name, 
    COUNT(MEMVendor_Name) AS MEMVendor_NameCount
FROM dbo.ahs_master_bc_system_mem_vendor AS V
WHERE AHS_CurrentCfg = 1
AND SYS_Product = 'Gen8'
GROUP BY 1, 2 -- The SQL standard allows group-by to reference column position

case ステートメントの簡略化と、より読みやすい形式への再フォーマットにも注意してください。

于 2012-10-10T18:12:41.200 に答える