Sql server 多重结果/情景

Sql server 多重结果/情景,sql-server,tsql,logic,Sql Server,Tsql,Logic,我有一个问题,我已经创建了一个解决方案,但我想知道是否有更好的方法来解决这个问题。基本上,我必须在ID和date分区下为某些场景创建一个标志。我的解决方案包括映射所有可能的场景,然后为所有这些场景创建带有特定结果的“case-when”语句。基本上,是我创造了结果。我想知道是否有另一种方法,让SQL代替我自己来创建结果 非常感谢 背景: +----+-----------+--------+-------+------+-----------------+--------------------

我有一个问题,我已经创建了一个解决方案,但我想知道是否有更好的方法来解决这个问题。基本上,我必须在ID和date分区下为某些场景创建一个标志。我的解决方案包括映射所有可能的场景,然后为所有这些场景创建带有特定结果的“case-when”语句。基本上,是我创造了结果。我想知道是否有另一种方法,让SQL代替我自己来创建结果

非常感谢

背景:

+----+-----------+--------+-------+------+-----------------+-----------------------------------------------------------------------------------+
| ID |   Month   | Status | Value | Flag | Scenario Number |                               Scenario Description                                |
+----+-----------+--------+-------+------+-----------------+-----------------------------------------------------------------------------------+
|  1 | 1/01/2016 | First  |   123 | No   |               1 | First, second and blank exists. Do not flag                                       |
|  1 | 1/01/2016 | Second |   456 | No   |               1 | First, second and blank exists. Do not flag                                       |
|  1 | 1/01/2016 |        |   789 | No   |               1 | First, second and blank exists. Do not flag                                       |
|  1 | 1/02/2016 | Second |   123 | Yes  |               2 | First does not exist, two second but have different values. Flag these as Yes     |
|  1 | 1/02/2016 | Second |   456 | Yes  |               2 | First does not exist, two second but have different values. Flag these as Yes     |
|  1 | 1/02/2016 | Second |   123 | No   |               3 | First does not exist, two second have same values. Do not flag                    |
|  1 | 1/02/2016 | Second |   123 | No   |               3 | First does not exist, two second have same values. Do not flag                    |
|  1 | 1/03/2016 | Second |   123 | No   |               4 | Only one entry of Second exist. Do no flag                                        |
|  1 | 1/04/2016 |        |   123 | Yes  |               5 | Two blanks for the partition. Flag these as Yes                                   |
|  1 | 1/04/2016 |        |   123 | Yes  |               5 | Two blanks for the partition. Flag these as Yes                                   |
|  1 | 1/05/2016 |        |       | No   |               6 | Only one entry of blank exist. Do not flag these                                  |
|  1 | 1/06/2016 | First  |   123 | Yes  |               7 | First exist for the partition. Do not flag                                        |
|  1 | 1/06/2016 |        |   456 | Yes  |               7 | First exist for the partition. Do not flag                                        |
|  1 | 1/07/2016 | Second |   123 | Yes  |               8 | First does not exist and second and blank do not have the same value. Flag these. |
|  1 | 1/07/2016 |        |   456 | Yes  |               8 | First does not exist and second and blank do not have the same value. Flag these. |
|  1 | 1/07/2016 | Second |   123 | Yes  |               8 | First does not exist and second and blank have the same value. Flag these.        |
|  1 | 1/07/2016 |        |   123 | Yes  |               8 | First does not exist and second and blank have the same value. Flag these.        |
+----+-----------+--------+-------+------+-----------------+-----------------------------------------------------------------------------------+
数据:

+----+-----------+-------+----------+---------------+
| ID |   Month   | Value | Priority | Expected_Flag |
+----+-----------+-------+----------+---------------+
|  1 | 1/01/2016 | 96.01 |          | Yes           |
|  1 | 1/01/2016 | 96.01 |          | Yes           |
|  1 | 1/02/2016 | 65.2  | First    | No            |
|  1 | 1/02/2016 | 3.47  | Second   | No            |
|  1 | 1/02/2016 | 45.99 |          | No            |
| 11 | 1/01/2016 | 25    |          | No            |
| 11 | 1/02/2016 | 74.25 | Second   | No            |
| 11 | 1/02/2016 | 74.25 | Second   | No            |
| 11 | 1/02/2016 | 23.25 |          | No            |
| 24 | 1/01/2016 | 1.25  | First    | No            |
| 24 | 1/01/2016 | 1.365 |          | No            |
| 24 | 1/04/2016 | 1.365 | First    | No            |
| 24 | 1/04/2016 | 1.365 |          | No            |
| 24 | 1/05/2016 | 1.365 | First    | No            |
| 24 | 1/05/2016 | 1.365 | First    | No            |
| 24 | 1/06/2016 | 1.365 | Second   | No            |
| 24 | 1/06/2016 | 1.365 | Second   | No            |
| 24 | 1/07/2016 | 1.365 | Second   | Yes           |
| 24 | 1/07/2016 | 1.365 |          | Yes           |
| 24 | 1/08/2016 | 1.365 | First    | No            |
| 24 | 1/08/2016 | 1.365 |          | No            |
| 24 | 1/09/2016 | 1.365 | Second   | No            |
| 24 | 1/09/2016 | 1.365 |          | No            |
| 27 | 1/01/2016 | 0     | Second   | Yes           |
| 27 | 1/01/2016 | 0     | Second   | Yes           |
| 27 | 1/02/2016 | 45.25 | Second   | No            |
|  3 | 1/01/2016 | 96.01 | First    | No            |
|  3 | 1/01/2016 | 96.01 | First    | No            |
|  3 | 1/03/2016 | 96.01 | First    | No            |
|  3 | 1/03/2016 | 96.01 | First    | No            |
| 35 | 1/01/2016 |       |          | Yes           |
| 35 | 1/01/2016 |       |          | Yes           |
| 35 | 1/02/2016 |       | First    | No            |
| 35 | 1/02/2016 |       | Second   | No            |
| 35 | 1/02/2016 |       |          | No            |
| 35 | 1/02/2016 |       |          | No            |
| 35 | 1/03/2016 |       | Second   | Yes           |
| 35 | 1/03/2016 |       | Second   | Yes           |
| 35 | 1/04/2016 |       | Second   | No            |
| 35 | 1/04/2016 |       | Second   | No            |
+----+-----------+-------+----------+---------------+

我不太明白。您是说您使用CASE语句来确定标志应该是yes还是no?好的。我会将所有可能的结果放在一个查找表中,而不是使用CASE语句。然后使用SELECT语句查找表中的值。原因是如果必须更改它们,那么更改表要比更改SQL过程容易得多。但是,如果您询问是否让SQL应用某种算法来确定哪些被标记,哪些不被标记,那么仅仅将正确的值放入表中可能不会有什么好处。接下来要改变这一点就更难了。这听起来是个好主意!我要给它一个口香糖。希望有帮助!