2016-07-25 8 views
0

Diese meine Frage ist, möchte ich percent Daten holen und zufälliger Reihenfolge, erhalte ich diese Fehler:falsche Syntax in der Nähe des ‚ORDER‘

Incorrect syntax near the keyword 'ORDER'.

Was stimmt hier nicht?

string sql = @"SELECT * FROM 
(
select * from (
SELECT TOP 100 PERCENT * FROM tbl_adv WHERE Stars = 7 and IsSpecial=true and Confirm='1' and show=true and ExpireDate >[email protected] ORDER BY NEWID()) a 
UNION 
select * from ( 
SELECT TOP 84 PERCENT * FROM tbl_adv WHERE Stars = 6 and IsSpecial=true and Confirm='1' and show=true and ExpireDate >[email protected] ORDER BY NewId()) b 
UNION 
select * from ( 
SELECT TOP 72 PERCENT * FROM tbl_adv WHERE Stars = 5 and IsSpecial=true and Confirm='1' and show=true and ExpireDate >[email protected] ORDER BY NewId()) c 
UNION 
select * from ( 
SELECT TOP 60 PERCENT * FROM tbl_adv WHERE Stars = 4 and IsSpecial=true and Confirm='1' and show=true and ExpireDate >[email protected] ORDER BY NewId()) d 
UNION 
select * from ( 
SELECT TOP 48 PERCENT * FROM tbl_adv WHERE Stars = 3 and IsSpecial=true and Confirm='1' and show=true and ExpireDate >[email protected] ORDER BY NewId()) e 
UNION 
select * from ( 
SELECT TOP 36 PERCENT * FROM tbl_adv WHERE Stars = 2 and IsSpecial=true and Confirm='1' and show=true and ExpireDate >[email protected] ORDER BY NewId()) f 
UNION 
select * from ( 
SELECT TOP 24 PERCENT * FROM tbl_adv WHERE Stars = 1 and IsSpecial=true and Confirm='1' and show=true and ExpireDate >[email protected] ORDER BY NewId()) g 
UNION 
select * from ( 
SELECT TOP 12 PERCENT * FROM tbl_adv WHERE Stars = 0 and IsSpecial=true and Confirm='1' and show=true and ExpireDate >[email protected] ORDER BY NewId()) h 
) 
ORDER BY Stars DESC, UpdateDate DESC"; 

Antwort

1

Ich denke, Sie müssen nur Ihren Tisch einen Alias ​​geben.

string sql = @"SELECT * FROM 
(
select * from (
SELECT TOP 100 PERCENT * FROM tbl_adv WHERE Stars = 7 and IsSpecial=true and Confirm='1' and show=true and ExpireDate >[email protected] ORDER BY NEWID()) a 
UNION 
select * from ( 
SELECT TOP 84 PERCENT * FROM tbl_adv WHERE Stars = 6 and IsSpecial=true and Confirm='1' and show=true and ExpireDate >[email protected] ORDER BY NewId()) b 
UNION 
select * from ( 
SELECT TOP 72 PERCENT * FROM tbl_adv WHERE Stars = 5 and IsSpecial=true and Confirm='1' and show=true and ExpireDate >[email protected] ORDER BY NewId()) c 
UNION 
select * from ( 
SELECT TOP 60 PERCENT * FROM tbl_adv WHERE Stars = 4 and IsSpecial=true and Confirm='1' and show=true and ExpireDate >[email protected] ORDER BY NewId()) d 
UNION 
select * from ( 
SELECT TOP 48 PERCENT * FROM tbl_adv WHERE Stars = 3 and IsSpecial=true and Confirm='1' and show=true and ExpireDate >[email protected] ORDER BY NewId()) e 
UNION 
select * from ( 
SELECT TOP 36 PERCENT * FROM tbl_adv WHERE Stars = 2 and IsSpecial=true and Confirm='1' and show=true and ExpireDate >[email protected] ORDER BY NewId()) f 
UNION 
select * from ( 
SELECT TOP 24 PERCENT * FROM tbl_adv WHERE Stars = 1 and IsSpecial=true and Confirm='1' and show=true and ExpireDate >[email protected] ORDER BY NewId()) g 
UNION 
select * from ( 
SELECT TOP 12 PERCENT * FROM tbl_adv WHERE Stars = 0 and IsSpecial=true and Confirm='1' and show=true and ExpireDate >[email protected] ORDER BY NewId()) h 
) Results 
ORDER BY Results.Stars DESC, Results.UpdateDate DESC"; 
0

Definieren Sie eine Tabelle Alias ​​für die SELECT, die Sie bestellen. Fügen Sie einfach einen Tabellennamen vor der ORDER BY-Klausel hinzu.

+0

danke, Ihre Antwort ist auch richtig! –