SQL如何如果一个表中有一个数字组合



我有一个id(数字(列表,如果使用该数字,它将等于一个更高的值。这些数字不是按时间顺序排列的。例如:100、101、102、103、104、151、125、126、152、155、156、158、160、153、166、167、120。

如果我有一组值(103126(都落入上表中;"好";如果我有一组值(103;失败";

我必须为每个组合写一个iif吗?

我尝试过IN语句,选择用户,用户代码来自用户表其中,用户代码在(1001102103104151125126152155156158160153166167120(中

假设您使用的是TSQL。

让我们设置一些示例数据(如果你在问题中这样做会非常有帮助(。

DECLARE @numbers TABLE (ID INT)
DECLARE @rnd INT
WHILE (SELECT COUNT(*) FROM @numbers) < 25
BEGIN
SET @rnd = ROUND(((50 - 1 -1) * RAND() + 1), 0) - 1
INSERT INTO @numbers (ID)
SELECT @rnd  WHERE @rnd NOT IN (SELECT * FROM @numbers WHERE ID = @rnd)
END

这将创建一个表变量,其中包含25个在0和50之间随机选取的INT。

SELECT *, CASE WHEN n.id IS NOT NULL AND n2.id IS NOT NULL THEN 'FOUND THEM BOTH!' 
WHEN n.id IS NULL AND n2.ID IS NOT NULL THEN 'FOUND ONLY Y!'
WHEN n2.id IS NULL AND n.ID IS NOT NULL THEN 'FOUND ONLY X!'
ELSE 'FOUND NEITHER!'
END AS result
FROM (VALUES ((ROUND(((50 - 1 -1) * RAND() + 1), 0) - 1),(ROUND(((50 - 1 -1) * RAND() + 1), 0) - 1))) a(x,y)
LEFT OUTER JOIN @numbers n
ON a.x = n.ID
LEFT OUTER JOIN @numbers n2
ON a.y = n2.ID

这将选取0和50之间的两个随机数,并在示例数据表变量中查找它们。在本例中,我使用了两个LEFT OUTER联接,因此我们总是得到一个结果,并使用case语句将结果解析为字符串。结果将是之一

  • "找到他们两个!"-这两个数字都存在于表中
  • '只找到X!'-在表中只找到了X值
  • "只找到Y!"-在表中只找到Y值
  • "都没有找到!"-表中找不到这两个数字

这是一个很好的演示,说明有时你需要将一个表连接两次,这很好,只需记住将其别名为

相关内容

最新更新