如何将Q1和Q2合并为Q5(但工作!)? PLSE?我坚持... SQL Server 2008 R2的Sql将WHEN和IF语句与多个参数结合起来
请看看我到目前为止已经试过:
--Q1不无差错地执行: DECLARE @RfDate日期 DECLARE @Description为nvarchar(250) DECLARE @BAccount诠释 SET @RfDate = '{Rf_Date}' SET @Description = {dbo.BankstatementLine_Description |类型=串} SET @BAccount = {dbo.BankAccount_Id}
IF @RfDate <> ''
BEGIN
SELECT *
FROM
dbo.BankStatementLine
WHERE
Date >[email protected]
AND
FkBankAccount = @BAccount
AND
IsDebit = 'true'
AND
Id NOT IN (select FkBankStatementLine from DocumentBankStatementLine)
END
ELSE
BEGIN
SELECT *
FROM
dbo.BankStatementLine
WHERE
Date <> @RfDate
AND
FkBankAccount [email protected]
AND
IsDebit = 'true'
AND
Id NOT IN (select FkBankStatementLine from DocumentBankStatementLine)
END
--Q2没有错误并执行: DECLARE @RAmount浮 SET @RAmount = {} Rf_Amount
IF @RAmount <>''
BEGIN
SELECT Amount
FROM dbo.BankStatementLine
WHERE [email protected]
END
ELSE
BEGIN
SELECT Amount
FROM dbo.BankStatementLine
WHERE Amount<>@RAmount
END
从X-Zero的后帮(必须说明我的性格好然后我的程序技巧btw),我想出了下面的查询,它实际上做它需要做的,除了最后两个AND OR规则。等的使用并不产生任何影响,如果我在场上@RfAccept输入“北京大学”,蒙山描述“0111111111 GPPeking”的条目应该提交,但不.....
:
DECLARE @RfDate date
DECLARE @BAccount int
DECLARE @RfAmount decimal
DECLARE @RfAcAmount float
DECLARE @RfKenmerk nvarchar(250)
DECLARE @RfAccept nvarchar(250)
SET @RfDate = '{Rf_Date}'
SET @BAccount = {dbo.BankAccount_Id}
SET @RfAmount = {Rf_Amount}
SET @RfAcAmount = {Rf_AccAmount}
SET @RfKenmerk = {Rf_Betalingskenmerk|type=string}
SET @RfAccept = {Rf_Acceptgiro|type=string}
SELECT *
FROM
dbo.BankStatementLine
WHERE -- All statements can have a value or ''. All statements are not mandatory.
isDebit = 1
AND Id NOT IN (select FkBankStatementLine from DocumentBankStatementLine)
AND fkBankAccount = {dbo.bankAccount_Id}
AND ((Date = @RfDate AND @RfDate <> '')
OR (Date <> @RfDate AND @RfDate = ''))
AND ((Amount = @RfAmount AND @RfAmount <> '')
OR (Amount <> @RfAmount AND @RfAmount = ''))
AND ((Amount = @RfAcAmount AND @RfAcAmount <> '')
OR (Amount <> @RfAcAmount AND @RfAcAmount = ''))
AND((Description LIKE '%@RfAccept%' AND @RfAccept<>'')--When Rf_Acceptgiro has a value, the value must be part of the field Description.
OR (Description <> @RfAccept AND @RfAccept ='')) --OR Return all Description rules
AND((Description LIKE '%@RfKenmerk%' AND @RfKenmerk<>'')--When Rf_Kenmerk has a value, the value must be part of the field Description.
OR (Description <> @RfKenmerk AND @RfKenmerk =''))--OR Return all Description rules
您的代码难以遵循,并且APPEARS试图尝试SQL不支持的内容。如果你能举一个你想要实现的例子,可能会有样本日期,更多的人应该能够帮助你... – Sparky
一个即时评论,在“Q5”中我似乎看到了IF/ELSE/ELSE构造? – BRFennPocock
*我知道,我很抱歉。我在该死的事情上工作了几个小时,并有即将到来的流感。这就是为什么我把问题直接放在网上,今天早上上床睡觉,看起来很新鲜...... *。谢谢大家看看。我在X-Zero的帮助下完成了这个查询(感谢你的教训!),但仍然有一件事要解决...... – Bouwplaats