【问题标题】:SQL select count of all rows when using IF ELSE使用 IF ELSE 时 SQL 选择所有行的计数
【发布时间】:2012-11-26 08:16:36
【问题描述】:

我在 SQL 中使用 IF ELSE 语句时遇到一种情况。

    @searchString nvarchar(50),
    @languageId int, 
    @count int,
    @id int
IF(@count IS NOT NULL)
    SELECT TOP (@count) Id, value
    FROM TABLE1
        WHERE  (Id IN
        (SELECT Id
    FROM      TABLE2
    WHERE   (Id = @id))) and languageId = @languageId AND value LIKE '%' + @searchString + '%'
ORDER BY value

ELSE
    SELECT Id, value
    FROM TABLE1
        WHERE  (Id IN
        (SELECT Id
        FROM      TABLE2
    WHERE   (Id = @id))) and languageId = @languageId AND value LIKE '%' + @searchString + '%'
ORDER BY value

我想使用返回所有行数 count(*) over() (或类似的东西) (因为我现在只返回 TOP 计数记录),就像在这里回答的那样: How to return total number of records with TOP * select

但是:我不会为每个实例都返回这个值,但我想只返回一次 count。

有没有办法用一个查询来做到这一点,或者我必须为此编写一个单独的查询?

任何提示将不胜感激!

编辑:使用 SQL Server 2008 r2。

【问题讨论】:

  • 哦,对不起,我忘了说:SQL server 2008 r2

标签: sql count sql-server-2008-r2 if-statement


【解决方案1】:

我建议您使用 INNER JOIN,例如带有脚本的示例: { 脚本

选择

                l.localite_id,
                p.patient_id,
                p.patient_date_naissance, 
                p.patient_gsm, p.patient_tel

来自 病人 p INNER JOIN 本地化 l ON l.localite_id = p.localite_id INNER JOIN 维尔 v ON v.ville_id = l.ville_id INNER JOIN gouvernorat g ON v.gouv_id = g.gouv_id INNER JOIN 付费 ON pays.pays_id = g.pays_id

如果 NEQ #patient_gsm# -1 WHERE p.patient_gsm like #patient_gsm#

和 p.patient_code 类似 #patient_code#

ENDIF

结束

}

【讨论】:

    猜你喜欢
    • 2021-05-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-27
    • 1970-01-01
    • 1970-01-01
    • 2017-07-22
    • 2020-11-09
    • 2017-01-20
    相关资源
    最近更新 更多