2016-05-03 12 views
0

Fragen Sie sich, ob ich mit dieser Syntax Hilfe bekommen könnte? Ich habe verschiedene Formen von "Exists" und "IsNull" ausprobiert und ich verstehe es einfach nicht.MSSQL/Entität Framework OrderBy, wenn existiert?

Ich habe drei Tabellen:

Item   Package  ItemsInPackages 
-----------  -------  --------------- 
ItemID   PackageID ID 
Name   Desc  PackageID 
Desc      ItemID 

Nun würde Ich mag eine Liste aller Elemente in Existenz zurückzukehren ...

SELECT * FROM Items 

aber jetzt möchte ich, dass sortieren, so dass Ich kann alle [Elemente], die in [PackageID] = 5 vorhanden sind, an den Anfang der Ergebnismenge legen.

D.h. Pseudo-Code ...

ORDER BY (ROW EXIST [ItemsInPackages].PackageID = 5) Something Something DESC? 

Mit MSSQL 2008 & Entity Framework 7. Entweder EF oder TSQL Syntax für mich funktionieren würde.

Vielen Dank im Voraus!

+0

Sind Sie die anderen Reihen wollen nach wie vor als auch zurückgegeben werden? Das bedeutet, dass alle Zeilen mit PackageID = 5 zuerst zurückgegeben werden, danach werden die restlichen Zeilen zurückgegeben. –

+0

Korrigieren. Alle Zeilen möchten zurückgegeben werden, aber alle Elemente des Pakets müssen oben stehen. –

+0

Möchten Sie Feedback zu den Antworten geben? – HABO

Antwort

1

Sie einen CASE Ausdruck verwenden können:

select * 
    from Items as I 
    order by case 
    when exists (select 42 from ItemsInPackages as IIP where IIP.ItemID = I.ItemID and IIP.PackageID = 5) then 0 
    else 1 end 
0

Versuchen Sie etwas wie das. Nicht getestet

SELECT * FROM Items 
WHERE [ItemsInPackages].PackageID = 5 
ORDER BY [ItemsInPackages] DESC; 
+2

Ich bin mir ziemlich sicher, dass SQL Server das Sortieren nach einer Tabelle unabhängig von der Richtung nicht unterstützt. Eine Tabelle in einer 'WHERE'-Klausel zu referenzieren, ohne sie in einer' SELECT'- oder 'FROM'-Klausel zu verwenden, und ohne Versuch, sie mit der' Items'-Tabelle zu korrelieren, wird nicht sonderlich gut funktionieren. – HABO