如何在变量SQL服务器中存储固定行值

The*_*hej 7 sql sql-server

我有一个表,最多可以有5行,最少1行.现在我需要将这些行存储在不同的变量中@v1,@v2,@v3,@v4,@v5.我该怎么做?

该表只有1列custid.

CustId
100
200
300
400
Run Code Online (Sandbox Code Playgroud)

如果表只包含1行,那么@v1应该有该值,其余的可以null.

Gio*_*sos 9

您可以使用以下查询:

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小提琴演示


Nen*_*vic 5

如果您有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)

SQLFiddle演示