第一行索引号小于

时间:2019-07-18 11:29:54

标签: sql-server data-warehouse

我有两个桌子

Table 1

Table 2

我喜欢在第一个表中添加一列。该列应包含表2中表1中的值小于此值的最低列号。应该根据ID号进行此比较。理想的结果是:

Result

1 个答案:

答案 0 :(得分:0)

这假定第二张表中的值是升序,并且id在第二张表中是唯一的。

如果第一个表中的值大于所有表中的值,即使只有5列,它也会返回“ 6”,但这应该相对容易处理。

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;