我的存储过程返回了要在引用中使用的数据。可选的最低费用。用户可以设置最低费用。但是,对于要应用的最低费用,用户需要选中一个表示应用最低费用的框。我有3个案例我想跟踪。
这是我负责该逻辑的存储过程的一部分。
,CASE
WHEN (ISNULL(PT.TranslationMasterTaskID, 0) > 0)
AND PTM.UseMinClientCharge = 1
AND (PTM.MinClientCharge > COALESCE(PT.RoundedClientTotal,0))
THEN 1
WHEN (ISNULL(PT.TranslationMasterTaskID, 0) > 0)
AND PTM.UseMinClientCharge = 0
AND (PTM.MinClientCharge > COALESCE(PT.RoundedClientTotal,0))
THEN 2
ELSE 0
END AS MinClientChargeWarning
我不明白为什么不显示2结果。即使我确定它应该。我试图将1,2和3改为' 1',' 2'和' 3',但我仍然获得 1 或 0 。
有什么理由,我只能 0 或 1 ?
感谢您的帮助。
答案 0 :(得分:1)
所以运行以下示例查询。您会注意到返回所有三个值。将UseMinClientCharge更改为BIT,您会发现只返回两个。
原因是BIT隐式地将0(false)以外的任何值转换为1(true)。
我们当然可以调整其他值来强制默认情况,但我怀疑这就是你所指的。
-- Begin Sample Data
CREATE TABLE #PT (
RowID INT NOT NULL,
TranslationMasterTaskID INT NULL,
RoundedClientTotal INT NULL
)
CREATE TABLE #PTM (
RowID INT NOT NULL,
UseMinClientCharge INT NULL,
MinClientCharge INT NULL
)
INSERT INTO #PT
( RowID, TranslationMasterTaskID,RoundedClientTotal )
VALUES ( 1,1,1 )
INSERT INTO #PT
( RowID, TranslationMasterTaskID,RoundedClientTotal )
VALUES ( 2,1,1 )
INSERT INTO #PT
( RowID, TranslationMasterTaskID,RoundedClientTotal )
VALUES ( 3,1,1 )
INSERT INTO #PTM
( RowID, UseMinClientCharge,MinClientCharge )
VALUES ( 1,0,2 )
INSERT INTO #PTM
( RowID, UseMinClientCharge,MinClientCharge )
VALUES ( 2,1,2 )
INSERT INTO #PTM
( RowID, UseMinClientCharge,MinClientCharge )
VALUES ( 3,2,2 )
-- End Sample Data
SELECT CASE
WHEN (ISNULL(PT.TranslationMasterTaskID, 0) > 0)
AND PTM.UseMinClientCharge = 1
AND (PTM.MinClientCharge > COALESCE(PT.RoundedClientTotal,0))
THEN 1
WHEN (ISNULL(PT.TranslationMasterTaskID, 0) > 0)
AND PTM.UseMinClientCharge = 0
AND (PTM.MinClientCharge > COALESCE(PT.RoundedClientTotal,0))
THEN 2
ELSE 0
END AS MinClientChargeWarning
FROM #PT PT
JOIN #PTM PTM ON (PTM.RowID = PT.RowID)
DROP TABLE #PT
DROP TABLE #PTM