表1结构如下:
runid prcsid use_id prcs_time flow_id
231 1 45467 2011-09-14 15:47:00 1
231 2 67676 2011-09-14 16:35:12 1
231 3 45454 2011-11-07 11:06:57 1
235 1 45467 2011-11-14          3
235 2 67376 2011-11-14 16:35:12 3
235 3 45554 2011-11-07 11:06:57 3
235 4 45454 2011-11-07          3
238 1 45454 2011-11-07 11:06:27 6
239 1 35467 2011-10-14 15:47:00 6
239 2 67376 2011-11-14 16:35:12 6
239 3 46554 2011-11-07 11:06:57 6
239 4 46454 2011-11-07 11:06:57 6
239 5 25454 2011-11-07 11:06:57 6
236 1 35467 2011-11-17 15:47:00 7
236 2 67376 2011-11-19 16:35:12 7
236 3 46d54 2011-11-20 11:06:57 7
236 4 46c54 2011-11-21 11:06:57 7
236 5 25454 2011-11-22 11:06:57 7
266 1 25654 2011-11-22 16:06:57 8
996 1 35467 2011-01-17 15:47:00 3
996 2 67376 2011-11-19 16:35:12 3
我想查找出prcs_time在11月1日到11月30日之间的数据并且prcsid字段为1那行数据的prcs_time列也必须为11月份的那组数据,并且我还想把prcsid列单独为1出现的数据全部过滤掉,即过滤掉非重复runid列数据,而且还过滤掉prcs_time为空的那组(相同runid号)数据,并且我还想判断flow_id为:1,3,6判断为上海,flow_id为7,8判断为北京结果如下:runid prcsid use_id prcs_time 区域
236 1 35467 2011-11-17 15:47:00 北京
236 2 67376 2011-11-19 16:35:12 北京
236 3 46d54 2011-11-20 11:06:57 北京
236 4 46c54 2011-11-21 11:06:57 北京
236 5 25454 2011-11-22 11:06:57 北京
996 1 35467 2011-01-17 15:47:00 上海
996 2 67376 2011-11-19 16:35:12 上海

解决方案 »

  1.   

    use Tempdb
    go
    --> --> 
     
    if not object_id(N'Tempdb..#T') is null
    drop table #T
    Go
    Create table #T([runid] int,[prcsid] int,[use_id] nvarchar(5),[prcs_time] Datetime,[flow_id] int)
    Insert #T
    select 231,1,N'45467','2011-09-14 15:47:00',1 union all
    select 231,2,N'67676','2011-09-14 16:35:12',1 union all
    select 231,3,N'45454','2011-11-07 11:06:57',1 union all
    select 235,1,N'45467','2011-11-14',3 union all
    select 235,2,N'67376','2011-11-14 16:35:12',3 union all
    select 235,3,N'45554','2011-11-07 11:06:57',3 union all
    select 235,4,N'45454','2011-11-07',3 union all
    select 238,1,N'45454','2011-11-07 11:06:27',6 union all
    select 239,1,N'35467','2011-10-14 15:47:00',6 union all
    select 239,2,N'67376','2011-11-14 16:35:12',6 union all
    select 239,3,N'46554','2011-11-07 11:06:57',6 union all
    select 239,4,N'46454','2011-11-07 11:06:57',6 union all
    select 239,5,N'25454','2011-11-07 11:06:57',6 union all
    select 236,1,N'35467','2011-11-17 15:47:00',7 union all
    select 236,2,N'67376','2011-11-19 16:35:12',7 union all
    select 236,3,N'46d54','2011-11-20 11:06:57',7 union all
    select 236,4,N'46c54','2011-11-21 11:06:57',7 union all
    select 236,5,N'25454','2011-11-22 11:06:57',7 union all
    select 266,1,N'25654','2011-11-22 16:06:57',8 union all
    select 996,1,N'35467','2011-11-17 15:47:00',3 union all
    select 996,2,N'67376','2011-11-19 16:35:12',3
    Go
    Select *,case when [flow_id] in(1,3,6) then N'上海' when [flow_id] in(7,8) then N'北京' end as 区域 
    from #T AS a
    WHERE 
    EXISTS(
    SELECT 1 FROM #T AS b WHERE [runid]=a.[runid] AND [prcs_time]>='2011-11-01' AND [prcs_time]<'2011-12-01' 
    AND NOT EXISTS(SELECT 1 FROM #T WHERE [runid]=b.[runid] AND CONVERT(VARCHAR(8),[prcs_time],8)='00:00:00')
    HAVING MAX([prcsid])<>MIN([prcsid]) AND MIN([prcsid])=1 
    )
    /*
    runid prcsid use_id prcs_time flow_id 区域
    236 1 35467 2011-11-17 15:47:00.000 7 北京
    236 2 67376 2011-11-19 16:35:12.000 7 北京
    236 3 46d54 2011-11-20 11:06:57.000 7 北京
    236 4 46c54 2011-11-21 11:06:57.000 7 北京
    236 5 25454 2011-11-22 11:06:57.000 7 北京
    996 1 35467 2011-11-17 15:47:00.000 3 上海
    996 2 67376 2011-11-19 16:35:12.000 3 上海
    */
      

  2.   

    to roy_88:不好意思我给数据不对,因为这两行数据:235 1 45467  3  ,235 4 45454  3 的prcs_time 字段是空的
    原始表是这样的:
    231 1 45467 2011-09-14 15:47:00 1
    231 2 67676 2011-09-14 16:35:12 1
    231 3 45454 2011-11-07 11:06:57 1
    235 1 45467  3
    235 2 67376 2011-11-14 16:35:12 3
    235 3 45554 2011-11-07 11:06:57 3
    235 4 45454  3
    238 1 45454 2011-11-07 11:06:27 6
    239 1 35467 2011-10-14 15:47:00 6
    239 2 67376 2011-11-14 16:35:12 6
    239 3 46554 2011-11-07 11:06:57 6
    239 4 46454 2011-11-07 11:06:57 6
    239 5 25454 2011-11-07 11:06:57 6
    236 1 35467 2011-11-17 15:47:00 7
    236 2 67376 2011-11-19 16:35:12 7
    236 3 46d54 2011-11-20 11:06:57 7
    236 4 46c54 2011-11-21 11:06:57 7
    236 5 25454 2011-11-22 11:06:57 7
    266 1 25654 2011-11-22 16:06:57 8
    996 1 35467 2011-01-17 15:47:00 3
    996 2 67376 2011-11-19 16:35:12 3
      

  3.   

    Select *,case when [flow_id] in(1,3,6) then N'上海' when [flow_id] in(7,8) then N'北京' end as 区域 
    from #T AS a
    WHERE 
    EXISTS(
    SELECT 1 FROM #T AS b WHERE [runid]=a.[runid] AND [prcs_time]>='2011-11-01' AND [prcs_time]<'2011-12-01' 
    AND NOT EXISTS(SELECT 1 FROM #T WHERE [runid]=b.[runid] AND [prcs_time] IS null)
    HAVING MAX([prcsid])<>MIN([prcsid]) AND MIN([prcsid])=1 
    )這樣就行了
      

  4.   

    对了,能不能转换成mqsql数据库的语法,因为,每次你的语句我还要重新转换成mysql的语法,CONVERT(VARCHAR(8),[prcs_time],8)='00:00:00'这句mysql的类似函数是
      

  5.   

    to roy_88:
    再加一组数据后测试,不对
    runid prcsid use_id prcs_time flow_id
    231 1 45467 2011-09-14 15:47:00 1
    231 2 67676 2011-09-14 16:35:12 1
    231 3 45454 2011-11-07 11:06:57 1
    235 1 45467 2011-11-14 3
    235 2 67376 2011-11-14 16:35:12 3
    235 3 45554 2011-11-07 11:06:57 3
    235 4 45454 2011-11-07 3
    238 1 45454 2011-11-07 11:06:27 6
    239 1 35467 2011-10-14 15:47:00 6
    239 2 67376 2011-11-14 16:35:12 6
    239 3 46554 2011-11-07 11:06:57 6
    239 4 46454 2011-11-07 11:06:57 6
    239 5 25454 2011-11-07 11:06:57 6
    236 1 35467 2011-11-17 15:47:00 7
    236 2 67376 2011-11-19 16:35:12 7
    236 3 46d54 2011-11-20 11:06:57 7
    236 4 46c54 2011-11-21 11:06:57 7
    236 5 25454 2011-11-22 11:06:57 7
    266 1 25654 2011-11-22 16:06:57 8
    996 1 35467 2011-01-17 15:47:00 3
    996 2 67376 2011-11-19 16:35:12 3
    555 1 25654 2011-11-22 16:06:57 7
    555 2 35467 2011-01-17 15:47:00 7
    555 3 7376  null 16:35:12 7