我在谈论SQL Server 2008.我有三个nvarchar
列的表。我想在第N行选择第一列,从第M行选择第二列,从第K行选择第三列,其中M,N,K不相等。
如何编写这样的查询?也可以选择随机行吗?
答案 0 :(得分:3)
您可以使用具有ROW_NUMBER()
功能的CTE来实现此目的:
;WITH CTE AS
(
SELECT
Column1, Column2, Column3,
(your list of additional columns - if needed),
RN = ROW_NUMBER() OVER (ORDER BY InsertionDate)
)
SELECT
FirstValue = (SELECT Column1 FROM CTE WHERE RN = N),
SecondValue = (SELECT Column2 FROM CTE WHERE RN = M),
ThirdValue = (SELECT Column3 FROM CTE WHERE RN = K)
您需要在此查询中将N, M, K
替换为实际的整数值 - 或者定义SQL变量以保存这三个值。
答案 1 :(得分:0)
declare @i1 int;
declare @i2 int;
declare @i3 int;
SET @i1=2;
SET @i2=4;
SET @i3=1;
;with t1 as
(
select *,row_number() over(order by (select 0)) as rn from t
)
select max(CASE rn WHEN @i1 then N1 else '' end),
max(CASE rn WHEN @i2 then N2 else '' end),
max(CASE rn WHEN @i3 then N3 else '' end)
from t1 where rn in (@i1,@i2,@i3);