我有两个桌子
我喜欢在第一个表中添加一列。该列应包含表2中表1中的值小于此值的最低列号。应该根据ID号进行此比较。理想的结果是:
答案 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;