我是這方面的新手,這也不是我的數據。我們正試圖將多個記錄放入一個查詢結果記錄中。SQL如果滿足條件,則將多行查詢到一個條目
爲了簡化數據的表和量,下面的兩個表應該是足夠的:
表1
PRVDR_NUM | RPT_REC_NUM
013 1234
014 4567
表2
RPT_REC_NUM | WKSHT_CD | LINE_NUM | ITM_VAL_NUM
1234 f1 3 30
1234 f1 9 3
1234 e2 100 100
4567 f1 3 20
4567 f1 9 8
4567 e2 100 100
第一部分是獲得所有記錄WKSHT_CD f1和LINE_NUM 3的ITM_NUM_CAL介於25和50之間,ITM_NUM_VAL是收入。
SELECT r.PRVDR_NUM as Provider,
r.RPT_REC_NUM as 'Report Record',
n.ITM_VAL_NUM as Revenue
FROM Table 1 r
left outer join Table 2 n on
r.RPT_REC_NUM = n.RPT_REC_NUM
WHERE (n.WKSHT_CD = 'f1') and (n.LINE_NUM = '3')
and (n.ITM_VAL_NUM > 25) and (n.ITM_VAL_NUM < 50)
and left(r.PRVDR_NUM, 2) in ('01','04','11','18','25','26','34','44','49')
所以我們的結果是:
Provider | Report Record | Revenue
013 1234 30
但是,我們也希望能夠拉動相應ITM_VAL_NUM爲WKSHT_CD f1和LINE_NUM 9,我們稱之爲成本。
所以結果應該是:
Provider | Report Record | Revenue | Cost
013 1234 30 3
提前很多感謝。
編輯
我相信這是我一直在尋找最終的查詢後,一些機動和增加了一個新的變量,CLMN_NUM,這是表2中另一列。
SELECT r.PRVDR_NUM as Provider,
r.RPT_REC_NUM as 'Report Record',
n.ITM_VAL_NUM as Revenue,
n2.ITM_VAL_NUM as 'Cost',
n3.ITM_VAL_NUM as 'Visits'
FROM table1 r
LEFT OUTER JOIN table2 n on r.RPT_REC_NUM = n.RPT_REC_NUM
LEFT OUTER JOIN table2 n2 on n.WKSHT_CD = n2.WKSHT_CD
and n.RPT_REC_NUM = n2.RPT_REC_NUM and n2.LINE_NUM = 9
LEFT OUTER JOIN table2 n3 on r.RPT_REC_NUM = n3.RPT_REC_NUM
and n3.WKSHT_CD = 'e2' and n3.LINE_NUM = 100 and n3.CLMN_NUM = xxxx
WHERE (n.WKSHT_CD = 'f1')
AND (n.LINE_NUM = '3')
AND (n.ITM_VAL_NUM > 25)
AND (n.ITM_VAL_NUM < 50)
AND left(r.PRVDR_NUM, 2) in ('01','04','11','18','25','26','34','44','49')
謝謝你的快速反應,當我嘗試你的子查詢解決方案,我得到一個消息超過1倍的值。當我嘗試一些修改後的JOIN解決方案時,我得到它的工作,但最終的方式太多行,好像它拉動了所有的成本。 – Frank 2011-04-28 17:07:23
在這兩方面都是因爲數據,我假設你只提供一個抽樣。您需要添加條件以確保只有1條記錄能夠返回。 – 2011-04-28 17:08:53
感謝您的幫助達斯汀,我編輯了一些修改和補充我的文章,這似乎是好嗎? – Frank 2011-04-28 19:20:16