2012-04-27 15 views
0

以下查詢拒絕在Sql服務器上工作,但它在Oracle 10gR2上運行良好。如何在Oracle和SQL Server之間進行兼容的SQL查詢?

SELECT COUNT(*) 
FROM (
    SELECT count(*) 
    FROM MYTABLE 
    WHERE id IS NOT NULL 
    GROUP BY id 
) 

它結束了此消息:

Microsoft OLE DB Provider for SQL Server error '80040e14' 

Ligne 7 : syntaxe incorrecte vers ')'. 

我怎樣才能使兩個DBMS兼容?

+0

Umm ... TABLE是兩個DBMS中的保留字。你確定確切的查詢給出了這個錯誤? – 2012-04-27 16:33:27

+0

@MarkByers TABLE僅僅是真正的名字的地方持有人 – Stephan 2012-04-27 16:36:59

+0

在發佈之前您對查詢有任何其他更改嗎?我們可以看到原始查詢嗎? – 2012-04-27 16:37:59

回答

4

SQL Server要求在派生表的別名,所以......

SELECT COUNT(*) 
FROM ( 
    SELECT count(*) 
    FROM TABLE 
    WHERE id IS NOT NULL 
    GROUP BY id 
) a 

我不知道該怎麼辦別名在Oracle中。此外,您需要在派生表中提供count(*)的列名。

1

這應該在兩個工作:

SELECT COUNT(DISTINCT id) 
FROM yourtable 
WHERE id IS NOT NULL 
+0

如果我使用多個字段,比如id,foo和bar字段,我該怎麼辦? – Stephan 2012-04-27 16:38:49

0

在SQL Server中這應該工作:

如果
SELECT count(id) 
FROM TABLE 
WHERE id IS NOT NULL 
GROUP BY id 

不知道它會在甲骨文的工作,雖然

1

如果我明白你是什麼試圖完成,我想你可以簡化到

SELECT COUNT(DISTINCT id) 
    FROM someTable 
WHERE id IS NOT NULL 

它應該在兩個數據庫上工作。

+0

如果我有多個字段,比如id,foo和bar字段,我該怎麼辦? – Stephan 2012-04-27 16:38:59

相關問題