当我的客户是某个客户时,我想只选择前50个记录。否则选择所有记录。我有以下(简化版)。我在SQL 2000上。可以这样做吗?
DECLARE @custnum AS VARCHAR(7)
SET @custnum = '1234567'
SELECT CASE @custnum
WHEN '1234567' THEN [TOP 50 DISTINCT]
ELSE [DISTINCT]
END
item1, item2
FROM myTable
WHERE myCust = @custnum
答案 0 :(得分:1)
就像你不能做到的那样!
但你可以使用IF ELSE语句来完成它。
伪码:
IF @custnum = '1234567'
SELECT [TOP 50 DISTINCT]
item1, item2
FROM myTable
WHERE myCust = @custnum
ELSE
SELECT [DISTINCT]
item1, item2
FROM myTable
WHERE myCust = @custnum
答案 1 :(得分:1)
您无法使用case
更改查询的语法。在SQL Server 2005中,您可以使用experssion作为top,但不能使用SQL Server 2000。
您必须进行两次单独的查询:
declare @custnum varchar(7)
set @custnum = '1234567'
if (@custnum = '1234567') begin
select top 50 distict item1, item2
from myTable
where myCust = @custnum
end else begin
select distinct item1, item2
from myTable
where myCust = @custnum
end
答案 2 :(得分:1)
参数化TOP计数怎么样?它仍然是一个丑陋的黑客,但至少你只需要一个查询。
DECLARE @custnum AS VARCHAR(7)
DECLARE @topcount as int
SET @custnum = '1234567'
SELECT @topcount = CASE WHEN @custnum = '1234567' THEN '50' ELSE 2147483647 END
SELECT DISTINCT TOP (@topcount)
item1, item2
FROM myTable
WHERE myCust = @custnum
编辑:对不起,刚刚意识到这是针对SQL Server 2000的。在这种情况下,这不会起作用。