【发布时间】:2015-08-03 19:51:01
【问题描述】:
我在 SQL Server 2008 R2 上遇到以下问题,我正在尝试对一组 UNION 使用 IF EXISTS 子句,但出现错误。
如果我单独运行查询,它们运行时没有错误,但如果我尝试使用 UNION 运行它们,它给了我错误:
消息 156,第 15 级,状态 1,第 9 行
关键字“IF”附近的语法不正确。
SELECT
'1.5.2- Customers' as INPUT,
count (distinct ID) as Z,
PRO_DATE,
Month(PRO_DATE) as P_MONTH,
Year(PRO_DATE) as P_YEAR
FROM
[BASE]
WHERE
BASE.CAT_CUSTO = 'EMPLO' and
BASE.ESTAT = 'EX'
group by
PRO_DATE
UNION
IF EXISTS (
SELECT
'1.6- OTHER CUSTOMERS' as INPUT,
count (distinct ID) as Z,
PRO_DATE,
Month(PRO_DATE) as P_MONTH,
Year(PRO_DATE) as P_YEAR
FROM
[BASE]
WHERE
BASE.CAT_CUSTO <> 'EMPLO'
group by
PRO_DATE
) begin
SELECT
'1.6- OTHER CUSTOMERS' as INPUT,
count (distinct ID) as Z,
PRO_DATE,
Month(PRO_DATE) as P_MONTH,
Year(PRO_DATE) as P_YEAR
FROM
[BASE]
WHERE
BASE.CAT_CUSTO <> 'EMPLO'
group by
PRO_DATE
end
ELSE
SELECT TOP 1
'1.6- OTHER CUSTOMERS' as INPUT,
0 as Z,
PRO_DATE,
Month(PRO_DATE) as P_MONTH,
Year(PRO_DATE) as P_YEAR
FROM
[BASE]
【问题讨论】:
-
您混淆了 T-SQL 控制流代码和 SQL 查询。不是一个不寻常的混乱,但你最好描述你想要做什么(即样本数据和期望的结果)而不是显示显然无法工作的代码。
-
Top 1withoutorder by只是从表中随机选择一条记录。 -
@Magnus 是的,这也让我感到困惑。
-
带有“前 1”的最后一部分仅获得 1 条记录,因为如果我有 100 条,我将得到 100 条相同的结果(表中每条记录的结果)
-
@ThatguyfromIT 你可以接受随机的
PRO_DATE吗?
标签: sql sql-server sql-server-2008-r2