2016-09-01 12 views
0

テーブルをproductsから選択します。 製品はseasonベースです。商品をテーブルから選択

各製品row/entityid_season

seasons表は

id | season_name | active | created | modified 

などの季節の名前に見えるという名前の列が含まれている私はすべて選択したい2016,2017,2018 ...

のような年です同じものを持つ2016年と2017年の製品code

私は

SELECT * 
FROM products P 
INNER JOIN seasons S ON S.id = P.id_season 
WHERE S.active = 1 
AND S.season_name IN (YEAR(GETDATE()), YEAR(GETDATE()) + 1 ) 

のように選択しても、異なる季節からの製品のコードを一致させるために、それを改良する方法がわからないシンプル。

+0

このクエリを使用して生成されたものをその結果は? –

+0

コードでグループを試しましたか?特定のコードの場合は、where句 –

答えて

1

;WITH cte_1 
AS 
(SELECT *,COUNT(p.code) OVER(partition by p.code Order by p.code) cnt 
FROM products P 
    INNER JOIN seasons S ON S.id = P.id_season 
WHERE S.active = 1 
AND S.season_name IN (YEAR(GETDATE()), YEAR(GETDATE()) + 1 )) -- or simply put IN ('2016','2017') 
SELECT * 
FROM cte_1 
WHERE cnt>1 

またはあなたが以下のようにサブクエリの形式を使用することができます。..以下のコードで試してみてください。

SELECT * 
FROM 
(SELECT *,COUNT(p.code) OVER(partition by p.code Order by p.code) cnt 
FROM products P 
    INNER JOIN seasons S ON S.id = P.id_season 
WHERE S.active = 1 
AND S.season_name IN (YEAR(GETDATE()), YEAR(GETDATE()) + 1 )) t 
WHERE t.nt>1 
0

次のようにして、内側のクエリを使用することができます。

SELECT * FROM products 
where id_season in (Select id from seasons where 
season_name IN (YEAR(GETDATE()), YEAR(GETDATE()) + 1 )); 
関連する問題