SELECT bm.WinningNumber,bd.BetOnNumber,"WinLossAmount" =
CASE
WHEN 2 in (2,1) THEN ('WIN')
END
FROM BettingMaster bm inner join BettingDetail bd on bm.GameID = bd.GameID
where bd.GameID = 1
这可以作为一个魅力,我在WinLossAmount中得到'WIN'。现在我实际上在列WinningNumber(varchar)中有值2,在列BetOnNumber(varchar)中有值2,1。我重申了这句话
SELECT bm.WinningNumber,bd.BetOnNumber,"WinLossAmount" =
CASE
WHEN bm.WinningNumber in (bd.BetOnNumber) THEN ('WIN')
END
FROM BettingMaster bm inner join BettingDetail bd on bm.GameID = bd.GameID
where bd.GameID = 1
这不起作用。这样不可能吗?!任何帮助?
答案 0 :(得分:0)
我认为问题在于,在第一个语句中,SQL比较2比1然后比较2比2,所有整数。显然,找到匹配和工作。
在第二种情况下,您将2与字符串“1,2”进行比较,2则不等于“1,2”。在比较varchar之前,您需要将varchar拆分为一系列整数。看看:
Parse comma-separated string to make IN List of strings in the Where clause
这应该会帮助你。
答案 1 :(得分:0)
您不能只使用IN然后指定列名,您需要使用子查询:
SELECT bm.WinningNumber ,
bd.BetOnNumber ,
"WinLossAmount" = CASE WHEN bm.WinningNumber IN (
SELECT bd.BetOnNumber
FROM BettingMaster bm
INNER JOIN BettingDetail bd ON bm.GameID = bd.GameID
WHERE bd.GameID = 1 ) THEN ( 'WIN' )
END
FROM BettingMaster bm
INNER JOIN BettingDetail bd ON bm.GameID = bd.GameID
WHERE bd.GameID = 1
答案 2 :(得分:0)
SQL中的IN运算符搜索行集中的值。但在第二个示例中,您尝试在STRING中找到INT值,因此您无法以这种方式使用IN
。
在大多数SQL系统中,您可以尝试使用以下条件。其中+
是MSSQL中的连接运算符(在Oracle ||
中,在MySQL CONCAT()
中)
WHEN ','+bd.BetOnNumber+',' LIKE '%,'+CAST(bm.WinningNumber AS VARCHAR(10))+',%'
THEN ...
同样在MySQL中,您可以使用FIND_IN_SET()功能:
WHEN FIND_IN_SET(bm.WinningNumber,bd.BetOnNumber) THEN ...
PS:两种方式都不能使用索引,所以你不应该在大表上使用它们。