SQL column4のデコードが、COLUMN5は別個のものであるのみ
質問
私は
のようなものの和(デコード())式を変更する必要がありますSUM(Decode(vcon.WAGON_TYPE_CODE,'MS',1,0))
vcon.WAGON-TYPE-CODE = 'MS' はと行をカウントし、何かにwag.ACI-TAG-NOは別個のものであるときにのみます。
二つの列は次のようになりのであれば、
vcon.WAGON_TYPE_CODE wag.ACI_TAG_NO
MS HI1111
SS C99999
MS HI1111
MS HI7777
SS HI8888
MS HI6666
の発現は現在ないSUM(デコード(vcon.WAGON_TYPE_CODE、 'MS'、1,0))として数3なく4を返す必要があります。
任意の提案ですか?
querySELECT = "SELECT "
querySELECT = querySELECT & "trn.WID_DATE, "
querySELECT = querySELECT & "trn.MINE_CODE, "
querySELECT = querySELECT & "trn.TRAIN_CONTROL_ID, "
querySELECT = querySELECT & "trn.NUM_CARS as HBD_Car_Count, "
querySELECT = querySELECT & "SUM(Decode(vcon.WAGON_TYPE_CODE,'MS',1,0)) M_Series, "
querySELECT = querySELECT & "(SUM(Decode(vcon.WAGON_TYPE_CODE,'SS',1,0))-SUM(Decode(wag.ACI_TAG_NO,'HI0000',1,0))) S_Series, "
querySELECT = querySELECT & "SUM(Decode(vcon.WAGON_TYPE_CODE,'CS',1,0)) C_Series, "
querySELECT = querySELECT & "SUM(Decode(wag.ACI_TAG_NO,'HI0000',1,0)) as No_Tag, "
querySELECT = querySELECT & "(COUNT(1) - trn.NUM_CARS) DB_Mismatch "
queryFROM = "FROM widsys.consist con, widsys.train trn, widsys.wagon wag, widsys.v_consist_ore_detail vcon "
queryWHERE = "WHERE trn.TRAIN_RECORD_ID = con.TRAIN_RECORD_ID "
queryWHERE = queryWHERE & "AND con.WAGON_ID = wag.WAGON_ID "
queryWHERE = queryWHERE & "AND ((vcon.CONSIST_ID=con.CONSIST_ID) "
queryWHERE = queryWHERE & "AND trn.MINE_CODE In (" & mine & ") "
queryWHERE = queryWHERE & "AND (trn.DIRECTION='N') "
queryWHERE = queryWHERE & "AND (wag.ACI_TAG_TYPE In ('CONTROL','SLAVE','ORE')) "
queryWHERE = queryWHERE & "AND (trn.WID_DATE>={ts '" & startDate & "'} "
queryWHERE = queryWHERE & "AND trn.WID_DATE<={ts '" & endDate & "'})) "
queryGROUPBY = "GROUP BY trn.WID_DATE, trn.MINE_CODE, trn.TRAIN_CONTROL_ID, trn.NUM_CARS "
queryORDERBY = "ORDER BY trn.WID_DATE DESC"
解決
私は(これが唯一の明確なwag.ACI_TAG_NO
を数えるときvcon.WAGON_TYPE_CODE='MS'
)以下は動作するはずだと思う。
COUNT(DISTINCT Decode(vcon.WAGON_TYPE_CODE,'MS',wag.ACI_TAG_NO,NULL))
E-G
SQL> WITH data AS (
2 SELECT 'MS' WAGON_TYPE_CODE, 'HI1111' ACI_TAG_NO FROM DUAL UNION ALL
3 SELECT 'SS', 'C99999' FROM DUAL UNION ALL
4 SELECT 'MS', 'HI1111' FROM DUAL UNION ALL
5 SELECT 'MS', 'HI7777' FROM DUAL UNION ALL
6 SELECT 'SS', 'HI8888' FROM DUAL UNION ALL
7 SELECT 'MS', 'HI6666' FROM DUAL
8 )
9 SELECT COUNT(DISTINCT decode(WAGON_TYPE_CODE,'MS',ACI_TAG_NO,NULL))
10 FROM DATA
11 ;
COUNT(DISTINCTDECODE(WAGON_TYP
------------------------------
3
乾杯、
-
ヴィンセント
他のヒント
あなたは重複タグをフィルタリングサブクエリを使用することができます。あなたのクエリはかなり複雑ですが、これはあなたが探しているだけの合計を計算します。
SELECT SUM(Decode(sub.WAGON_TYPE_CODE,'MS',1,0))
FROM (
SELECT DISTINCT vcon.WAGON_TYPE_CODE, wag.ACI_TAG_NO
FROM widsys.wagon wag
INNER JOIN widsys.consist con
ON con.wagon_id = wag.wagon_id
INNER JOIN widsys.v_consist_ore_detail vcon
ON vcon.CONSIST_ID = con.CONSIST_ID
) sub
DISTINCTは(wagon_type、aci_tag_no)の組み合わせごとに1つだけの行があると確認します。
所属していません StackOverflow