嘿伙计们我是sql server中的新手,我有一个基于我的Count结果的条件,它应该在我的查询中跳过或包含一个连接,以简化故事,如何在SQL中实现这样的事情:
select count(names) as rslt
if(rslt)>0 then
select......join tables
else
Select...
如你所见,我想说如果计数是> 0然后进行加入,否则它应该跳过然后加入并转到下一行,我该如何实现呢?
答案 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
而不是COUNT
。 EXISTS
将使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
无需使用一个临时变量来存储计数。