2016-08-15 3 views
1

enter image description hereSQL поисковый запрос для вертикальной экономии

Мне нужно, чтобы получить все booktypes, который имеет salesyear только в 2013,2014 и не должны иметь продаж в любой другой год. Поэтому в моих примерах данные должны возвращать только «научную литературу».

Я попытался

select booktype where salesyear in (2013,2014) 

это возвращение как художественной и научной литературы, но мне нужно, чтобы получить данные, если salesyear имеет только в 2013 году, 2014, но не в любой другой год

Я с помощью SQL Server 2008

ответ

0

Вы можете использовать условную агрегацию:

SELECT booktype 
FROM yourTable 
GROUP BY booktype 
HAVING SUM(CASE WHEN salesyear = 2013 THEN 1 ELSE 0 END) > 0 AND -- 2013 present 
     SUM(CASE WHEN salesyear = 2014 THEN 1 ELSE 0 END) > 0 AND -- 2014 present 
     SUM(CASE WHEN salesyear IN (2013, 2014) THEN 1 ELSE 0 END) = COUNT(*) -- only 2013 and 
                       -- only 2014 
+0

Downvoter: Пожалуйста, Оставить комментарий. –

+0

это дает типы книг, у которых также есть год продаж 2011, который не работает. Мне нужны только типы книг, которые должны иметь как salesyear 2013, так и 2014 только – user2624242

+0

все еще дает мне результат, если на продажу будет только 2013 год, но мои результаты должны иметь как 2013, так и 2014 год. – user2624242

0

Y НУ можете получить все BookType с продаж в 2013 и 2014 годах, за исключением продажи в любой другой год, чем 2013/2014.

SELECT DISTINCT a.BookType 
FROM MyTable a 
JOIN MyTable b on a.BookType = b.BookType AND b.SalesYear = 2014 
WHERE a.SalesYear = 2013 
AND a.BookType NOT IN 
(
    SELECT DISTINCT BookType 
    FROM MyTable 
    WHERE SalesYear NOT IN (2013, 2014) 
) 
+0

это дает мне результат, который может быть в 2013 или 2014 году, но типы книг должны быть как в 2013, так и в 2014 году. – user2624242

+0

Я вижу. Я не знал, что он смотрит на 2013 и 2014 годы. Я изменил запрос. Попробуйте. – ydoow

0

Я думаю, что это удовлетворит ваши требования выше:

SELECT s.BookType 
FROM Test s 
WHERE SalesYear IN (2013,2014) 
AND NOT EXISTS(
SELECT BookType 
FROM Test 
WHERE BookType = s.BookType AND SalesYear NOT IN (2013,2014)) 
GROUP BY BookType HAVING COUNT(DISTINCT(SalesYear)) > 1 
Смежные вопросы