我有一个表,最多可以有5行,最少1行.现在我需要将这些行存储在不同的变量中@v1,@v2,@v3,@v4,@v5.我该怎么做?
该表只有1列custid.
CustId
100
200
300
400
Run Code Online (Sandbox Code Playgroud)
如果表只包含1行,那么@v1应该有该值,其余的可以null.
您可以使用以下查询:
SELECT @v1 = MAX(CASE WHEN rn = 1 THEN CustId END),
@v2 = MAX(CASE WHEN rn = 2 THEN CustId END),
@v3 = MAX(CASE WHEN rn = 3 THEN CustId END),
@v4 = MAX(CASE WHEN rn = 4 THEN CustId END),
@v5 = MAX(CASE WHEN rn = 5 THEN CustId END)
FROM (
SELECT CustId, ROW_NUMBER() OVER (ORDER BY CustId) AS rn
FROM mytable ) t
Run Code Online (Sandbox Code Playgroud)
使用ROW_NUMBER您为表的每个记录分配一个不同的数字.然后,在外部查询中使用条件聚合,您可以使用此数字来设置每个单独的变量.
如果少于5行,则相应的变量将设置为NULL.
如果您有SQL Server 2012或更高版本,则可以尝试LAG()函数.
SELECT
@v1 = custID
, @v2 = LAG(custID, 1) OVER (ORDER BY custID DESC)
, @v3 = LAG(custID, 2) OVER (ORDER BY custID DESC)
, @v4 = LAG(custID, 3) OVER (ORDER BY custID DESC)
, @v5 = LAG(custID, 4) OVER (ORDER BY custID DESC)
FROM yourTable
ORDER BY CustID DESC
Run Code Online (Sandbox Code Playgroud)