选择COUNT然后调整SQL

时间:2018-04-20 06:43:06

标签: sql sql-server

嘿伙计们我是sql server中的新手,我有一个基于我的Count结果的条件,它应该在我的查询中跳过或包含一个连接,以简化故事,如何在SQL中实现这样的事情:

select count(names) as rslt
if(rslt)>0 then
select......join tables
else
Select...

如你所见,我想说如果计数是> 0然后进行加入,否则它应该跳过然后加入并转到下一行,我该如何实现呢?

6 个答案:

答案 0 :(得分:3)

DECLARE @Name INT

SELECT
    @Name = COUNT(names)
FROM Table

IF @Name > 0
BEGIN
    PRINT 'Do somthing'
END
ELSE
    PRINT 'Do something else'
END

只需将PRINT语句更改为查询逻辑

即可

答案 1 :(得分:1)

DECLARE @reslt integer     
 @reslt = select count(names)
    if @reslt >0 then
    select......join tables

您需要将其放入变量中然后调用它。

答案 2 :(得分:1)

如果要检查生成的查询是否返回任何行(>0),那么您应该使用IF而不是EXISTS而不是COUNTEXISTS将使SQL引擎在找到至少1行后停止运行,而COUNT将强制实际计算所有记录。

IF EXISTS (SELECT 1 FROM YourTable WHERE names IS NOT NULL)
BEGIN

    SELECT
        YourColumn
    FROM
        Table1
        INNER JOIN Table2 ON --...

END
ELSE
BEGIN

    SELECT
        YourColumn
    FROM
        Table1

END

另一方面,如果您需要检查特定金额,则必须COUNT并分配给变量。

DECLARE @CountTotal INT = (SELECT COUNT(names) FROM YourTable)

IF @CountTotal > 100
BEGIN

    SELECT
        YourColumn
    FROM
        Table1
        INNER JOIN Table2 ON --...

END
ELSE
BEGIN

    SELECT
        YourColumn
    FROM
        Table1

END

答案 3 :(得分:1)

您还可以使用如下的动态查询:

DECLARE @SQL NVARCHAR(MAX);

SELECT @SQL = N'SELECT *
  FROM T1 ' + CASE WHEN (SELECT COUNT(names) FROM  table1) > 0 THEN + 
  ' INNER JOIN T2 ON T1.Id = T2.Id '  ELSE  '' END

PRINT @SQL

EXEC sp_executesql @SQL;

答案 4 :(得分:1)

使用CASE函数,如下所示:

Select count(CustomerID),
CASE
WHEN count(CustomerID) > 30 THEN "The quantity is greater than 30"
WHEN count(CustomerID) = 30 THEN "The quantity is 30"
ELSE "The quantity is something else"
END
FROM Customers;

答案 5 :(得分:1)

您也可以尝试以下方法。

 if((select count(Name) from tableName)>0)
 begin
    select 1
 end 
 else
 begin
    select 2
 end 

无需使用一个临时变量来存储计数。