sql查询搜索垂直保存

时间:2016-08-15 05:41:04

标签: sql sql-server

enter image description here

我需要获得仅在2013,2014销售年份的所有书籍类型,并且不应该在任何其他年份销售。所以在我的示例数据中,应该只返回'非小说'。

我试过了

select booktype where salesyear in (2013,2014)

这回归了小说和非小说,但如果销售年仅在2013年,2014年,而不是在任何其他年份,我需要获取数据

我正在使用SQL Server 2008

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

您可能希望在2013年和2014年获得所有BookType销售额,不包括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)
)