如何编写查询

时间:2014-05-13 07:56:03

标签: sql

我有一张表格如下;

Id是主键

+----+---------------+--------------+--------------+--------------+
| Id |  BaseQuestionId    | ColumnContent| Active Flag  |  DependentId | 
+----+--------------------+--------------+--------------+--------------+
|  1 | 0                  | Ques One     |       Y      |       0      |
|  2 | 0                  | Ques Two     |       Y      |       0      |
|  3 | 0                  | Ques Three   |       N      |       0      |
|  4 | 1                  | Ques One1    |       Y      |       1      |
|  5 | 1                  | Ques One2    |       Y      |       1      |
|  6 | 1                  | Ques One4    |       Y      |       1      |
|  7 | 2                  | Ques One5    |       Y      |       1      |
|  8 | 2                  | Ques One6    |       Y      |       1      |
|  9 | 3                  | Ques One7    |       Y      |       1      |
| 10 | 1                  | Ques One8    |       N      |       1      |
| 11 | 3                  | Ques One9    |       N      |       1      |
| 12 | 3                  | Ques One10   |       Y      |       1      |
+----+--------------------+--------------+--------------+--------------+

我需要计算活动问题(活动标志='A')。

通过考虑coulmn DependentId(0基本问题,1依赖问题):

TotalBaseQues = 3其中('2'有效,'1'无效) TotalDependentQues = 9其中('7'有效,'2'无效)

尽管基本问题是无效的,但我需要通过考虑其主动依赖问题来列出基本问题

我需要如下结果:  TotalActiveBaseQuestion = 3

请帮帮我。

我需要编写一个查询来获取输出。

3 个答案:

答案 0 :(得分:1)

假设只有一个问题的嵌套问题:

SELECT Count(*)
FROM tbl a
WHERE DependentId = 0
AND (
    a.[Active Flag] = 'Y'
        OR EXISTS (
        SELECT 1 
        FROM tbl b 
        WHERE b.BaseQuestionID = a.ID 
       AND b.[Active Flag] = 'Y' 
    )
)

如果嵌套更深,则需要使用依赖于您正在使用的数据库的迭代和循环。

答案 1 :(得分:0)

SELECT COUNT(*) FROM tbl WHERE DependentId = 0 AND [Active Flag] = 'Y'

答案 2 :(得分:0)

尝试以下方法:

 SELECT COUNT(DISTINCT A.Id)
   FROM tbl AS A
        LEFT JOIN tbl AS B ON B.BaseQuestionId = A.Id AND B.DependantId = 1
  WHERE B.Id IS NOT NULL
    AND (A.[Active Flag] = 'Y' OR B.[Active Flag] = 'Y')

例如,请参阅我的SQLFiddle

相关问题