如何根据两个依赖列

时间:2017-02-23 14:23:27

标签: mysql sql sql-server

我在数据库中有一个表,下面是列:

  1. 姓名
  2. XYZ
  3. ABC
  4. 该表有多个记录,但对Month,Year和Name的组合有唯一约束。

    该表格的数据如下:

      Month   Year    Name
    1) 1       2016   test1
    2) 2       2016   test2
    3) 3       2016   test3
    4) 1       2017   test4
    5) 2       2017   test5
    

    现在我想要的记录大于或等于第3个月且大于等于2016年。 所以输出应该像下面这样:

      Month    Year    Name
    1) 3       2016   test3
    2) 1       2017   test4
    3) 2       2017   test5
    

    如何实现这一目标。我没有得到任何关于如何做到这一点的提示。我正在添加where条款,其中月份> = 3年份> = 2016但它没有返回任何记录,我认为是正确的,因为我正在申请和两个表达式的条件。

3 个答案:

答案 0 :(得分:3)

为了产生你在第二个表中描述的结果,我会写这个查询:

select [Month], [Year], [Name]
from Table -- your table name
where year > 2016 or ( year = 2016 and month >= 3) -- don't forget the parentheses.

从结果表中可以理解的是,单词中描述的查询将是:

向我提供年度大于2017年的所有记录(在这种情况下,月份不重要,给我所有月份)或者如果年份是2016年,请给我所有月份大于或等等于3(包括3月及以后)。不要给我任何年度小于2016年的记录。

如果这是正确的,那么上面发布的查询会给出正确的结果。

答案 1 :(得分:1)

如果您希望获得'2016-03-01'之后或之后开始的所有记录,那么一种方法是将[year][month]重新构建回date数据类型。

select *
from t
where convert(date,convert(varchar(10),([year]*10000)+([month]*100)+1)) >= '20160301'

或在sql server 2012 +

select *
from t
where datefromparts([year],[month],1) >= '20160301'

答案 2 :(得分:-1)

你的问题不明确。从您想要的解释"和"条件但在输出结果中它应该是"或"。对于前月> = 3或年>> = 2016。这是你的输出说法。