0
我有兩個表中的數據,我加入。表A看起來是這樣的:優化多查詢代碼SQL Server 2008 R2
VISIT ID | ADM_DATE | ...
12345678 | 1800-01-01 | ...
...
表B看起來是這樣的:
VISIT ID | CLASFPRIO | CLASFCD | CLASFTYPE
12345678 | 01 | ###.## | DF
12345678 | 02 | ###.## | DF
12345678 | 03 | ###.## | DF
我想實現的是,像這樣的輸出:
A.VISIT ID | B.CLASFCD_1 | B.CLASFCD_2 | B.CLASFCD_2
12345678 | ###.## | ###.## | ###.##
...
表A中的列其中我在where子句中設置了條件,表B也是如此。下面是我到目前爲止所做的工作,它的工作原理,它只是很多代碼:
DECLARE @SD DATETIME;
DECLARE @ED DATETIME;
DECLARE @CP_1 INT;
DECLARE @CP_2 INT;
DECLARE @CP_3 INT;
DECLARE @SCT VARCHAR(10);
SET @SD = '2014-01-01';
SET @ED = '2014-02-01';
SET @CP_1 = 1;
SET @CP_2 = 2;
SET @CP_3 = 3;
SET @SCT = 'DF';
DECLARE @ICD9_1 TABLE (
PtNo_Num VARCHAR(20)
, ICD_1 VARCHAR(10)
)
INSERT INTO @ICD9_1
SELECT B.PtNo_Num
, B.CLASFCD_1
FROM (
SELECT DISTINCT PtNo_Num,
ClasfCd AS CLASFCD_1
FROM smsdss.BMH_PLM_PtAcct_Clasf_Dx_V
WHERE ClasfPrio = @CP_1
AND SortClasfType = @SCT
) B
--SELECT * FROM @ICD9_1
-----------------------------------------------------------------------
DECLARE @ICD9_2 TABLE (
PtNo_Num VARCHAR(20)
, ICD_2 VARCHAR(10)
)
INSERT INTO @ICD9_2
SELECT C.PtNo_Num
, C.CLASFCD_2
FROM (
SELECT DISTINCT PtNo_Num,
ClasfCd AS CLASFCD_2
FROM smsdss.BMH_PLM_PtAcct_Clasf_Dx_V
WHERE ClasfPrio = @CP_2
AND SortClasfType = @SCT
) C
--SELECT * FROM @ICD9_2
-----------------------------------------------------------------------
DECLARE @ICD9_3 TABLE (
PtNo_Num VARCHAR(20)
, ICD_3 VARCHAR(10)
)
INSERT INTO @ICD9_3
SELECT D.PtNo_Num
, D.CLASFCD_3
FROM (
SELECT DISTINCT PtNo_Num,
ClasfCd AS CLASFCD_3
FROM smsdss.BMH_PLM_PtAcct_Clasf_Dx_V
WHERE ClasfPrio = @CP_3
AND SortClasfType = @SCT
) D
--SELECT * FROM @ICD9_3
-----------------------------------------------------------------------
DECLARE @ICD9F TABLE(
PTNO_NUM VARCHAR(20)
, ICD9_1 VARCHAR(10)
, ICD9_2 VARCHAR(10)
, ICD9_3 VARCHAR(10)
)
INSERT INTO @ICD9F
SELECT
E.PTNO_NUM
, E.ICD9_1
, E.ICD9_2
, E.ICD9_3
FROM (
SELECT PV.PtNo_Num
, ICD9_1.ICD_1 AS ICD9_1
, ICD9_2.ICD_2 AS ICD9_2
, ICD9_3.ICD_3 AS ICD9_3
FROM smsdss.BMH_PLM_PtAcct_V PV
JOIN @ICD9_1 ICD9_1
ON PV.PtNo_Num = ICD9_1.PtNo_Num
JOIN @ICD9_2 ICD9_2
ON PV.PtNo_Num = ICD9_2.PtNo_Num
JOIN @ICD9_3 ICD9_3
ON PV.PtNo_Num = ICD9_3.PtNo_Num
WHERE PV.Adm_Date >= @SD
AND PV.Adm_Date < @ED
AND PV.Plm_Pt_Acct_Type = 'I'
AND PV.PtNo_Num < '20000000'
) E
SELECT * FROM @ICD9F
雖然這確實起作用,但它有很多代碼,它確實讓人有點困惑,所以我將問題改爲優化查詢。
更新:CLASFCD可以是字母和數字同時更新代碼來什麼,我現在的建議BY @METAPHOR
WORKING謝謝
會在早上試試,謝謝,有趣的方式來思考一下吧。 –
這不起作用,我沒有意識到ClasfCD可以是字母數字,我會努力爭取努力並解決我的問題。 –
是的,這是一個交叉表的要求,該列需要是一個聚合。 – Metaphor