1
我正在创建一个报告,用户可以在两个状态字段之间进行选择。默认Completed
状态和Any
。如果选择的状态不是Completed
,那么它需要忽略或选择所有值。我创建了一个包含所有不同值的临时表,并将其设置为局部变量。我试图在我的where
子句中使用case statement
和这个临时表来处理这个问题,但它不会让我。除了将sql
设置为字符串和exec'ing
之外,还有更好的方法来处理吗?在where子句中使用临时表时遇到问题
Declare @paramCompleted varchar(20) = 'Completed'
Declare @paramCommitmentExamined varchar(20) = 'Requested'
Declare @paramDateFrom Date
Declare @paramDateTo Date
Declare @PurchStatus as table([status] varchar(15))
insert into @PurchStatus([status]) select DISTINCT TX01STAT from dimFile_T order by TX01STAT
--select * from @PurchStatus
SELECT
dbo.ParseDate(O.ORDDATE) AS ORDDATE,
T.TX04STAT,--Commitment Examined & type
E.EXAMINER,
T.TX02STAT,--Outside search
C.COUNTY,
S.SETTSTAT,
CASE
WHEN L.LOANAMT = 0 THEN 'Cash'
ELSE CAST(L.LOANAMT AS VARCHAR(10))
END AS LOANAMT,
T.TX01STAT,--Purchase agreement received
M.MKTSOURC,
CASE
WHEN C.FIRMFILE LIKE '%PC%' THEN 'Commercial'
WHEN C.FIRMFILE LIKE '%RC%' THEN 'Commercial'
ELSE 'Residential'
END AS FIRMFILE,
C.FIRMFILE as FILENUM,
'Metes & Bounds' AS LOTUNIT,
S.STATCMT
FROM
dimFile_O O
LEFT JOIN dimfile_T T ON T.FIRMFILE = O.FIRMFILE
LEFT JOIN dimfile_E E ON E.FIRMFILE = O.FIRMFILE
LEFT JOIN dimfile_C C ON C.FIRMFILE = O.FIRMFILE
LEFT JOIN dimfile_S S ON S.FIRMFILE = O.FIRMFILE
LEFT JOIN dimfile_L L ON L.FIRMFILE = O.FIRMFILE
LEFT JOIN dimfile_M M ON M.FIRMFILE = O.FIRMFILE
LEFT JOIN dimfile_P P ON P.FIRMFILE = O.FIRMFILE
WHERE
T.TX04STAT IN (@paramCommitmentExamined)
AND T.TX01STAT IN (
CASE
WHEN @paramCompleted = 'Completed' THEN @paramCompleted
ELSE @PurchStatus
END)
我没想到像那样分组他们。完美的作品。谢谢! – NikZ