2016-06-26 7 views
0

を使用してここに私のクエリです:SQL - エラーUNION

Select top 1 ProductName, UnitPrice from Products 
order by UnitPrice desc 

UNION 

Select top 1 ProductName, UnitPrice from Products 
Where UnitPrice > 0 
order by UnitPrice asc 

私は1つのテーブルで最も高価と安い製品を表示したかったです。だから、私はUNIONを使って2つのクエリを結合しました。私のクエリで間違っているものを - 残念ながら、私はあなたの助けを求めています理由ですキーワードの近くにエラー

不適切な構文「UNION」

を取得しますか?

+0

http://stackoverflow.com/questions/5551064/combining-order-by-and-union-in-sql-server duplicate。オーダーを結合体と組み合わせることはできませんが、マルチプレット、サブクエリ、またはウィンドウ関数を使用すると、答えが得られます。また、2つの製品が同じ高価なものや安いものを持っていれば、1つ以上の結果が必要なのでしょうか? – Matt

+0

重複した質問を申し訳ありません。最も高価なものが最も安いものと同じ価格であれば、私は両方の結果を見たいと思っています – Loreno

+0

何回か検索する用語を理解するのは難しいです。 2つの製品の私の質問は実際にはあなたのサンプルとは少し異なりますが、同じ低価格を持つ2つの製品と同じ高価な価格を持つ2つの製品があるとします。なぜなら、4つのすべての製品が私の答えに必要なのであれば、以下のウィンドウ関数で答える必要があるからです。他の方法ではありません。 – Matt

答えて

2
;WITH X AS 
    (
    Select top 1 ProductName, UnitPrice from Products 
    order by UnitPrice desc 
), 
Y AS 
    (
    Select top 1 ProductName, UnitPrice from Products 
    Where UnitPrice > 0 
    order by UnitPrice asc 
) 
SELECT ProductName, UnitPrice FROM X 
UNION ALL 
SELECT ProductName, UnitPrice FROM Y 
+0

良い答え。同じ価格の他の製品があるかどうかを確認するためにWITH TIESを追加することをお勧めします。 – Loreno

1

あなたはこのように丸括弧を使用することができます。

(Select top 1 ProductName, UnitPrice from Products order by UnitPrice desc) 
UNION 
(Select top 1 ProductName, UnitPrice from Products Where UnitPrice > 0 order by UnitPrice asc) 

乾杯を!

+0

残念ながら、それはうまくいきませんでしたが、助けてくれてありがとう – Loreno

2

あなたはMinPriceRank = 1 OR MaxPriceRank = 1の最大値と最小スイッチのすべての関係を確認したい場合はサブAS共通テーブル式のCTE

;WITH cte AS (
    SELECT * 
     ,MinPriceRowNum = ROW_NUMBER() OVER (ORDER BY UnitPrice) 
     ,MaxPriceRowNum = ROW_NUMBER() OVER (ORDER BY UnitPriceDESC) 
     ,MinPriceRank = DENSE_RANK() OVER (ORDER BY UnitPrice) 
     ,MaxPriceRank = DENSE_RANK() OVER (ORDER BY UnitPriceDESC) 
    FROM  
     TableName 
) 

SELECT * 
FROM 
    cte 
WHERE 
    MinPriceRowNum = 1 
    OR MaxPriceRowNum = 1 

を選択しています。 RowNum列に1行だけが必要な場合。

+0

あなたの答えは良いですが、正しい答えとして他のものをチェックしました。使用はより複雑で、正直言って、私はそれを完全に理解していません。私はSQLの基礎だけを知っています。とにかく、あなたの助けに感謝します。 – Loreno

+0

私はウィンドウ関数と共通テーブル式を使用していました。どちらもあなたのSQLツールボックスに入れる資産です – Matt

+0

残念ながら私は大学でSQLコースを終えましたが、私が期待していた以上に面白いと思われるので、もっと学ぶ機会がありますように願っています。 – Loreno