日期:2014-05-18  浏览次数:20548 次

再次感谢前辈们的指教,我继续问一个查询问题。
字段A 字段B 字段C 字段D
A 结束 3 a
A 开始 2 b
A 开始 1 c
B 结束 7 a
B 开始 6 b
B 开始 5 c
B 开始 4 d
B 开始 3 e
B 开始 2 f
B 开始 1 g
C 开始 2 a
C 开始 1 b
D 开始 3 a
D 开始 2 b
D 开始 1 c


字段B是字段A的状态,需要把不含结束的记录集提取出来,并且取得最大的那个字段C的值和最小的哪一个对应的字段D的值,所以,最终结果就是:
C 开始 2 b
D 开始 3 c
这样一个查询怎么写呢?
再一次谢谢CSDN的朋友们,我学到很多东西。。


------解决方案--------------------
SQL code
select [字段A],[字段B],MAX([字段C]) as [字段C],max([字段D]) as [字段D]
from test
where [字段A] not in(
select [字段A] from test where [字段B]='结束'
)
group by [字段A],[字段B]

------解决方案--------------------
SQL code
select
  a.字段A ,a.字段B,a.字段C,b.字段D
from tab a,tab b
where a.字段A = b.字段A
and not exists (
  select 1
  from tab
  where 字段A = a.字段A
  and 字段B = '结束'
  )
and not exists (
  select 1
  from tab
  where 字段A = a.字段A
  and 字段c > a.字段c
  )
and not exists (
  select 1
  from tab
  where 字段A = b.字段A
  and 字段c < b.字段c
  )

------解决方案--------------------
SQL code

IF EXISTS (SELECT 1 FROM SYSOBJECTS WHERE name = 'tba')
BEGIN
    DROP TABLE tba
END
GO
CREATE TABLE tba
(
    a VARCHAR(10),
    b VARCHAR(10),
    c INT,
    d VARCHAR(10)
)
GO
INSERT INTO tba
SELECT 'A','结束',3,'a' UNION
SELECT 'A','开始',2,'b' UNION
SELECT 'A','开始',1,'c' UNION
SELECT 'B','结束',7,'a' UNION
SELECT 'B','开始',6,'b' UNION
SELECT 'B','开始',5,'c' UNION
SELECT 'B','开始',4,'d' UNION
SELECT 'B','开始',3,'e' UNION
SELECT 'B','开始',2,'f' UNION
SELECT 'B','开始',1,'g' UNION
SELECT 'C','开始',2,'a' UNION
SELECT 'C','开始',1,'b' UNION
SELECT 'D','开始',3,'a' UNION
SELECT 'D','开始',2,'b' UNION
SELECT 'D','开始',1,'c'

SELECT A,b,MAX(c) AS C,MAX(d) AS D
FROM tba
WHERE a NOT IN (SELECT a from tba WHERE b = '结束')
GROUP BY a,b

A    b    C    D
C    开始    2    b
D    开始    3    c