我有这样的数据
id | 名字 |
---|---|
1 | AA |
2 | BB |
3 | 抄送 |
4 | DD |
5 | EE |
鉴于此,我必须使用这样的 select 语句。
select *
from (
select
row_number() over (partition by id order by id asc) as row
, id
, name
) tmp
where tmp.id in (2,3,4) -- Just an example of condition in outer query
我无法调整外部查询 [tmp] 选择。 当我希望显示数据为
行 | id | 名字 |
---|---|---|
1 | 2 | BB |
2 | 3 | 抄送 |
3 | 4 | DD |
有什么方法可以达到预期的
row_number()
无需创建临时表,并在每次以某种条件查询数据时使用存储过程进行删除和插入。
我现在能找到的最好的情况是使用新的临时表作为您想要的结果,并存储过程根据指定的条件截断和插入它
BEGIN TRY
TRUNCATE TABLE [TEMP]
IF EXISTS (SELECT 1 FROM MAIN WHERE your condition)
SELECT @TableName = 'MAIN'
, @Condition = 'your condition'
ELSE
SELECT @TableName = 'MAIN'
, @Condition = ' '
SELECT @sqlCommand = 'INSERT INTO TEMP select
/**columns**/
from '+@TableName
+@Condition
EXEC (@sqlCommand)
SET @o_MSG = 'OK';
COMMIT;
END TRY
BEGIN CATCH
ROLLBACK;
SET @o_MSG = 'ERROR';
END CATCH