仅选择SQL Server中具有一个或多个特定值的值

时间:2016-09-11 15:53:28

标签: sql sql-server tsql sql-server-2014

我有下表CampaingControl

+----------------+-----+-------------+--------------+-----------+--------+
| id_vehicleCamp | vin | id_campaign | id_workorder | id_client | status |
+----------------+-----+-------------+--------------+-----------+--------+
|                |     |             |              |           |        |
+----------------+-----+-------------+--------------+-----------+--------+
|                |     |             |              |           |        |
+----------------+-----+-------------+--------------+-----------+--------+

status列只有两个值 APPLIED PENDING

我需要做的是显示distinct列中的所有id_campaign值,其中一个或多个status值等于待定

例如,我在表格中有这些数据:

+----------------+-------+-------------+--------------+-----------+---------+
| id_vehicleCamp |  vin  | id_campaign | id_workorder | id_client |  status |
+----------------+-------+-------------+--------------+-----------+---------+
|        1       | 43006 |      1      |   OT-001-16  |    NULL   | PENDING |
+----------------+-------+-------------+--------------+-----------+---------+
|        2       | 43010 |      1      |   OT-002-16  |     2     | PENDING |
+----------------+-------+-------------+--------------+-----------+---------+
|        3       | 43009 |      1      |   OT-002-16  |    NULL   | APPLIED |
+----------------+-------+-------------+--------------+-----------+---------+
|        4       | 43008 |      2      |   OT-002-16  |    NULL   | APPLIED |
+----------------+-------+-------------+--------------+-----------+---------+
|        5       | 43002 |      3      |   OT-005-16  |     4     | PENDING |
+----------------+-------+-------------+--------------+-----------+---------+

最终输出必须是:

+-------------------+
| Pending Campaings |
+-------------------+
|         1         |
+-------------------+
|         3         |
+-------------------+

1的活动有一个 APPLIED status,但2 PENDING status,然后没有完成。

价值3的活动只有一条记录并且待处理 status,然后没有完成。

4 个答案:

答案 0 :(得分:2)

SELECT id_campaign AS [Pending Campaings] FROM CampaingControl
WHERE status = 'PENDING' GROUP BY id_campaign HAVING COUNT(*) >= 1

OR

SELECT DISTINCT id_campaign AS [Pending Campaings] FROM CampaingControl
WHERE status = 'PENDING'

答案 1 :(得分:1)

使用条件聚合:

SELECT id_campaign
FROM CampaingControl
GROUP BY id_campaign
HAVING SUM(CASE WHEN status = 'PENDING' THEN 1 ELSE 0 END) >= 1

请注意,此查询会推广到您可能遇到的其他问题,例如有多少个广告系列有两个待处理条目但只有一个已应用条目。

答案 2 :(得分:0)

它也应该有效:

SELECT id_campaign FROM TABLE_NAME WHERE status = 'PENDING' GROUP BY  id_campaign

答案 3 :(得分:-1)


您可以将查询用作

SELECT id_vehicleCamp FROM TABLE_NAME WHERE id_vehicleCamp IN 
(SELECT DISTINCT STATUS FROM TABLE_NAME);

此查询提供您的结果。