簡體   English   中英

如何在一組和中顯示0?

[英]How can show 0 in a group of sum?

我正在嘗試創建一個交叉表,但我需要一種通過cia_ensures重復每個policy_business_unit組的查詢

我的桌子:

|policies|
  |id|  |client|  |policy_business_unit_id|  |cia_ensure_id|   |state|       
   1      MATT                  1                   1             0
   2      STEVE                 1                   2             1
   3      BILL                  1                   3             2
   4      LARRY                 1                   4             0

|policy_business_units|
   |id|   |name|  |comercial_area_id|
     1     LIFE         1 

|comercial_areas|
   |id|   |name|
    1      BANK

|cia_ensures|
   |id|   |name|
    1      SPRINT
    2      APPLE
    3      PEPSI
    4      ORANGE
    5      BT

這是信息:

http://sqlfiddle.com/#!2/37690/2

我正在嘗試使用所有cia_ensures顯示計算結果:

SELECT ce.name AS CIAS, pb.name AS UNIT,
   SUM(CASE WHEN p.state =0 THEN 1 ELSE 0 END ) AS ACTIVES, 
   SUM(CASE WHEN p.state =1 THEN 1 ELSE 0 END ) AS INACTIVES,
   SUM(CASE WHEN p.state =2 THEN 1 ELSE 0 END ) AS OTHERS
From policies p 
  INNER JOIN policy_business_units pb ON pb.id = p.policy_business_unit_id
  INNER JOIN comercial_areas ca ON ca.id = pb.comercial_area_id
  INNER JOIN cia_ensures ce ON ce.id = p.cia_ensure_id
WHERE policy_business_unit_id IN (1) 
GROUP BY cia_ensure_id

我得到這個結果:

UNIT             CIAS        COMERCIAL_AREAS    STATE_0   STATE_1   STATUS_2
 LIFE            SPRINT       BANK                  1       0           0
 LIFE            APPLE        BANK                  0       1           0
 LIFE            PEPSI        BANK                  0       0           1
 LIFE            ORANGE       BANK                  1       0           0

這是我的問題:我想顯示所有cia_ensure_id,如果沒有關系,則顯示0

我該怎么做才能得到這個結果?

UNIT             CIAS        COMERCIAL_AREAS    STATE_0   STATE_1   STATUS_2
 LIFE            SPRINT       BANK                  1       0           0
 LIFE            APPLE        BANK                  0       1           0
 LIFE            PEPSI        BANK                  0       0           1
 LIFE            ORANGE       BANK                  1       0           0
 LIFE            BT           BANK                  0       0           0 

我試過了

SELECT ce.name AS CIAS, pb.name AS UNIT,
   SUM(CASE WHEN p.state =0 THEN 1 ELSE 0 END ) AS ACTIVES, 
   SUM(CASE WHEN p.state =1 THEN 1 ELSE 0 END ) AS INACTIVES,
   SUM(CASE WHEN p.state =2 THEN 1 ELSE 0 END ) AS OTHERS
From policies p 
  INNER JOIN policy_business_units pb ON pb.id = p.policy_business_unit_id
  INNER JOIN comercial_areas ca ON ca.id = pb.comercial_area_id
  INNER JOIN cia_ensures ce ON ce.id = p.cia_ensure_id
WHERE policy_business_unit_id IN (1) AND cia_ensured_id IN (1,2,3,4,5)
GROUP BY cia_ensure_id

各種幫助都會被接受。

請給我各種各樣的幫助。

謝謝。

SELECT ce.name AS CIAS, pb.name AS UNIT,
   SUM(CASE WHEN p.state =0 THEN 1 ELSE 0 END ) AS ACTIVES, 
   SUM(CASE WHEN p.state =1 THEN 1 ELSE 0 END ) AS INACTIVES,
   SUM(CASE WHEN p.state =2 THEN 1 ELSE 0 END ) AS OTHERS
From policies p 
  INNER JOIN policy_business_units pb ON pb.id = p.policy_business_unit_id
  INNER JOIN comercial_areas ca ON ca.id = pb.comercial_area_id
  RIGHT JOIN cia_ensures ce ON ce.id = p.cia_ensure_id
WHERE (policy_business_unit_id IN (1) or policy_business_unit_id is null)
GROUP BY cia_ensure_id

從內部向右更改,如果它在其他表之前,則可以保留,因為它是最后一個表。 基本上,您需要CIA的所有記錄,並且只希望其他表中匹配的記錄。

請注意,您還必須在policy_business_Unit上查找空值,否則(1)將排除由右聯接添加的行。

或將條件移至聯接,以便僅應用聯接之前的行

SELECT ce.name AS CIAS, pb.name AS UNIT,
   SUM(CASE WHEN p.state =0 THEN 1 ELSE 0 END ) AS ACTIVES, 
   SUM(CASE WHEN p.state =1 THEN 1 ELSE 0 END ) AS INACTIVES,
   SUM(CASE WHEN p.state =2 THEN 1 ELSE 0 END ) AS OTHERS
From policies p 
  INNER JOIN policy_business_units pb 
    ON pb.id = p.policy_business_unit_id 
    and policy_business_unit_id IN (1)
  INNER JOIN comercial_areas ca ON ca.id = pb.comercial_area_id
  RIGHT JOIN cia_ensures ce ON ce.id = p.cia_ensure_id
GROUP BY cia_ensure_id

假設所有NULL PB.name都可以讀取'LIFE',然后將第一條選擇行更改為......但這對我來說是一個錯誤的假設。 因此,除非有管理此規則的規則,否則null應該是基於設計的有效響應。

SELECT ce.name AS CIAS, coalesce(pb.name,'LIFE') AS UNIT,

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM