数字小于的第一行索引
Posted
技术标签:
【中文标题】数字小于的第一行索引【英文标题】:The first row index the number is smaller than 【发布时间】:2019-07-18 11:29:54 【问题描述】:我有两张桌子
我喜欢在第一个表中添加一列。此列应包含表 2 中小于表 1 值的最小列号。这种比较应该根据 ID 号进行。期望的结果是:
【问题讨论】:
那么你的问题是什么?你已经说明了你想要什么,但仅此而已。如果您知道自己需要做什么,则不需要我们的许可;但如果你觉得你需要它,你有我的。 没有必要自大。显然我需要一些帮助或指导来做到这一点。我可能会补充一点,我尝试使用 while 循环来解决它,但它变得非常混乱,对我来说不起作用。 您使用的是什么版本的 SQL Server? 我一点也不“自大”。 Stack Overflow 是一个提问的网站;如果您没有问题,我们将无法帮助您。 “你能指导我吗”不是一个问题,并且会被认为是广泛的 SO。如果您进行了一些尝试,那么请在您的问题中显示这些内容,当您编辑它以询问我们可以帮助您的问题时。 How do I ask a good question?。一旦我们知道您的问题,那么志愿者将非常乐意尝试回答(包括我自己)。 所以对于这个问题我不太确定。我正在通过 SQL Server Management Studio 使用 Azure 数据仓库。回答够了吗? 【参考方案1】:这假设第二个表中的值是升序的,并且 id 在第二个表中是唯一的。
例如,如果第一个表中的值大于所有列,它也会返回“6”,即使只有 5 列,但这应该相对容易处理。
CREATE TABLE #t1 (id CHAR(1), val FLOAT);
CREATE TABLE #t2 (id CHAR(1), col1 FLOAT, col2 FLOAT, col3 FLOAT, col4 FLOAT, col5 FLOAT);
INSERT INTO #t1
VALUES ('a',1),('b',2),('c',3),('a',2);
INSERT INTO #t2
VALUES ('a',1,2,3,4,5),
('b',1,1.5,2,10,11),
('c',-1,1,1.5,3,4);
-- unpivot the data into key value pairs
SELECT id, name, val
INTO #t2u
FROM
(
SELECT *
from #t2
) a
UNPIVOT
(
val
FOR name IN ([col1],[col2],[col3],[col4],[col5])
) u
-- now count how many are less than or equal then add 1 because we want the next col
SELECT #t1.id,
#t1.val,
COUNT(*) + 1
FROM #t1
LEFT OUTER JOIN #t2u ON #t2u.id = #t1.id
AND #t2u.val <= #t1.val
GROUP BY #t1.id,
#t1.val;
【讨论】:
非常感谢。这是一个非常好的解决方案!我从中学到了很多。 很高兴您发现它很有用。请投票并接受答案,给我光荣的互联网积分以上是关于数字小于的第一行索引的主要内容,如果未能解决你的问题,请参考以下文章