高手紧急求救!!!

bbksoft 2003-07-30 10:10:01
我用如下的SQL语句
SELECT FM_AlarmList.NODE_NAME, FM_AlarmList.CalID,FM_AlarmList.CELL_NAME, FM_AlarmList.AlarmID,FM_AlarmList.FMData_Code,FM_AlarmList.OverDataTime
FROM FM_AlarmList, FM_OverSet
WHERE (SELECT COUNT(DISTINCT FM_AlarmList.FMData_Code)
FROM FM_AlarmList, FM_OverSet
WHERE FM_AlarmList.FMData_Code IN ('TF_DR(%)', '话音信道掉话次数')
AND (Getdate() BETWEEN FM_OverSet.Begin_DateTime AND FM_OverSet.End_DateTime)
AND (FM_AlarmList.FMData_Code = FM_OverSet.FMDATA_CODE)
AND (FM_AlarmList.FM_Values > FM_OverSet.MaxVale OR FM_AlarmList.FM_Values < FM_OverSet.MinVale)
AND (FM_AlarmList.NODE_NAME = FM_OverSet.NE_NAME)
AND FM_AlarmList.CalID = '20030730084208-560') = 2
AND FM_AlarmList.FMData_Code IN ('TF_DR(%)', '话音信道掉话次数')
AND (GETDATE() BETWEEN FM_OverSet.Begin_DateTime AND FM_OverSet.End_DateTime)
AND (FM_AlarmList.FMData_Code = FM_OverSet.FMDATA_CODE)
AND (FM_AlarmList.FM_Values > FM_OverSet.MaxVale OR FM_AlarmList.FM_Values < FM_OverSet.MinVale)
AND (FM_AlarmList.NODE_NAME = FM_OverSet.NE_NAME)
AND FM_AlarmList.CalID = '20030730084208-560'
order by cell_name
执行后结果如下:、
NODE_NAME CalID CELL_NAME AlarmID FMData_Code OverDataTime
---------- -------------------- ---------- ----------- -------------------------------------------------- ----------------------------------------------------------------------------------------------------
NNBSC2 20030730084208-560 G11132 108533 TF_DR(%) 2003-07-15 16:30:00---2003-07-15 16:45:00
NNBSC2 20030730084208-560 G11132 108542 话音信道掉话次数 2003-07-15 16:30:00---2003-07-15 16:45:00
NNBSC2 20030730084208-560 G11341 108536 TF_DR(%) 2003-07-15 16:30:00---2003-07-15 16:45:00
NNBSC2 20030730084208-560 G11341 108550 话音信道掉话次数 2003-07-15 16:30:00---2003-07-15 16:45:00
NNBSC2 20030730084208-560 G21582 108538 TF_DR(%) 2003-07-15 16:30:00---2003-07-15 16:45:00
NNBSC2 20030730084208-560 G23391 108539 TF_DR(%) 2003-07-15 16:30:00---2003-07-15 16:45:00
NNBSC2 20030730084208-560 G23392 108540 TF_DR(%) 2003-07-15 16:30:00---2003-07-15 16:45:00
NNBSC2 20030730084208-560 G24782 108535 TF_DR(%) 2003-07-15 16:30:00---2003-07-15 16:45:00
NNBSC2 20030730084208-560 G25232 108534 TF_DR(%) 2003-07-15 16:30:00---2003-07-15 16:45:00
NNBSC2 20030730084208-560 G25232 108545 话音信道掉话次数 2003-07-15 16:30:00---2003-07-15 16:45:00
NNBSC2 20030730084208-560 G30581 108537 TF_DR(%) 2003-07-15 16:30:00---2003-07-15 16:45:00

(11 row(s) affected)
然而我希望的结果如下:
NODE_NAME CalID CELL_NAME AlarmID FMData_Code OverDataTime
---------- -------------------- ---------- ----------- -------------------------------------------------- ----------------------------------------------------------------------------------------------------
NNBSC2 20030730084208-560 G11132 108533 TF_DR(%) 2003-07-15 16:30:00---2003-07-15 16:45:00
NNBSC2 20030730084208-560 G11132 108542 话音信道掉话次数 2003-07-15 16:30:00---2003-07-15 16:45:00
NNBSC2 20030730084208-560 G11341 108536 TF_DR(%) 2003-07-15 16:30:00---2003-07-15 16:45:00
NNBSC2 20030730084208-560 G11341 108550 话音信道掉话次数 2003-07-15 16:30:00---2003-07-15 16:45:00
NNBSC2 20030730084208-560 G25232 108534 TF_DR(%) 2003-07-15 16:30:00---2003-07-15 16:45:00
NNBSC2 20030730084208-560 G25232 108545 话音信道掉话次数 2003-07-15 16:30:00---2003-07-15 16:45:00
请各位高手指点如何修改上面的SQL语句,不胜感激!!!
...全文
35 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
愉快的登山者 2003-07-30
  • 打赏
  • 举报
回复
使用临时表过度一下:
SELECT FM_AlarmList.NODE_NAME, FM_AlarmList.CalID,FM_AlarmList.CELL_NAME, FM_AlarmList.AlarmID,FM_AlarmList.FMData_Code,FM_AlarmList.OverDataTime
into #t
FROM FM_AlarmList, FM_OverSet
WHERE (SELECT COUNT(DISTINCT FM_AlarmList.FMData_Code)
FROM FM_AlarmList, FM_OverSet
WHERE FM_AlarmList.FMData_Code IN ('TF_DR(%)', '话音信道掉话次数')
AND (Getdate() BETWEEN FM_OverSet.Begin_DateTime AND FM_OverSet.End_DateTime)
AND (FM_AlarmList.FMData_Code = FM_OverSet.FMDATA_CODE)
AND (FM_AlarmList.FM_Values > FM_OverSet.MaxVale OR FM_AlarmList.FM_Values < FM_OverSet.MinVale)
AND (FM_AlarmList.NODE_NAME = FM_OverSet.NE_NAME)
AND FM_AlarmList.CalID = '20030730084208-560') = 2
AND FM_AlarmList.FMData_Code IN ('TF_DR(%)', '话音信道掉话次数')
AND (GETDATE() BETWEEN FM_OverSet.Begin_DateTime AND FM_OverSet.End_DateTime)
AND (FM_AlarmList.FMData_Code = FM_OverSet.FMDATA_CODE)
AND (FM_AlarmList.FM_Values > FM_OverSet.MaxVale OR FM_AlarmList.FM_Values < FM_OverSet.MinVale)
AND (FM_AlarmList.NODE_NAME = FM_OverSet.NE_NAME)
AND FM_AlarmList.CalID = '20030730084208-560'
order by cell_name

select * from #t A
where (select count(*) from #t where cell_name = A.cell_name) = 2
order by cell_name

drop table #t

bbksoft 2003-07-30
  • 打赏
  • 举报
回复
tj_dns:
这样写太复杂了,本来我的SQL语句已经够复杂的了,请问大虾有没有更简练的方法
愉快的登山者 2003-07-30
  • 打赏
  • 举报
回复
select * from (
SELECT FM_AlarmList.NODE_NAME, FM_AlarmList.CalID,FM_AlarmList.CELL_NAME, FM_AlarmList.AlarmID,FM_AlarmList.FMData_Code,FM_AlarmList.OverDataTime
FROM FM_AlarmList, FM_OverSet
WHERE (SELECT COUNT(DISTINCT FM_AlarmList.FMData_Code)
FROM FM_AlarmList, FM_OverSet
WHERE FM_AlarmList.FMData_Code IN ('TF_DR(%)', '话音信道掉话次数')
AND (Getdate() BETWEEN FM_OverSet.Begin_DateTime AND FM_OverSet.End_DateTime)
AND (FM_AlarmList.FMData_Code = FM_OverSet.FMDATA_CODE)
AND (FM_AlarmList.FM_Values > FM_OverSet.MaxVale OR FM_AlarmList.FM_Values < FM_OverSet.MinVale)
AND (FM_AlarmList.NODE_NAME = FM_OverSet.NE_NAME)
AND FM_AlarmList.CalID = '20030730084208-560') = 2
AND FM_AlarmList.FMData_Code IN ('TF_DR(%)', '话音信道掉话次数')
AND (GETDATE() BETWEEN FM_OverSet.Begin_DateTime AND FM_OverSet.End_DateTime)
AND (FM_AlarmList.FMData_Code = FM_OverSet.FMDATA_CODE)
AND (FM_AlarmList.FM_Values > FM_OverSet.MaxVale OR FM_AlarmList.FM_Values < FM_OverSet.MinVale)
AND (FM_AlarmList.NODE_NAME = FM_OverSet.NE_NAME)
AND FM_AlarmList.CalID = '20030730084208-560'
) A
where (select count(*) from (
SELECT FM_AlarmList.NODE_NAME, FM_AlarmList.CalID,FM_AlarmList.CELL_NAME, FM_AlarmList.AlarmID,FM_AlarmList.FMData_Code,FM_AlarmList.OverDataTime
FROM FM_AlarmList, FM_OverSet
WHERE (SELECT COUNT(DISTINCT FM_AlarmList.FMData_Code)
FROM FM_AlarmList, FM_OverSet
WHERE FM_AlarmList.FMData_Code IN ('TF_DR(%)', '话音信道掉话次数')
AND (Getdate() BETWEEN FM_OverSet.Begin_DateTime AND FM_OverSet.End_DateTime)
AND (FM_AlarmList.FMData_Code = FM_OverSet.FMDATA_CODE)
AND (FM_AlarmList.FM_Values > FM_OverSet.MaxVale OR FM_AlarmList.FM_Values < FM_OverSet.MinVale)
AND (FM_AlarmList.NODE_NAME = FM_OverSet.NE_NAME)
AND FM_AlarmList.CalID = '20030730084208-560') = 2
AND FM_AlarmList.FMData_Code IN ('TF_DR(%)', '话音信道掉话次数')
AND (GETDATE() BETWEEN FM_OverSet.Begin_DateTime AND FM_OverSet.End_DateTime)
AND (FM_AlarmList.FMData_Code = FM_OverSet.FMDATA_CODE)
AND (FM_AlarmList.FM_Values > FM_OverSet.MaxVale OR FM_AlarmList.FM_Values < FM_OverSet.MinVale)
AND (FM_AlarmList.NODE_NAME = FM_OverSet.NE_NAME)
AND FM_AlarmList.CalID = '20030730084208-560'
) B where B.cell_name = A.cell_name) = 2
order by cell_name
bbksoft 2003-07-30
  • 打赏
  • 举报
回复
G11132 108533 TF_DR(%)
G11132 108542 话音信道掉话次数
G11341 108536 TF_DR(%)
G11341 108550 话音信道掉话次数
G23391 108539 TF_DR(%)
G23392 108540 TF_DR(%)
G24782 108535 TF_DR(%)
G25232 108534 TF_DR(%)
G25232 108545 话音信道掉话次数
bbksoft 2003-07-30
  • 打赏
  • 举报
回复
执行后结果如下:
20030730084208 108533 TF_DR(%)
20030730084208 108542 话音信道掉话次数
20030730084208 108536 TF_DR(%)
20030730084208 108550 话音信道掉话次数
20030730084208 108539 TF_DR(%)
20030730084208 108540 TF_DR(%)
20030730084208 108535 TF_DR(%)
20030730084208 108534 TF_DR(%)
20030730084208 108545 话音信道掉话次数

然而我希望的结果如下:
20030730084208 108533 TF_DR(%)
20030730084208 108542 话音信道掉话次数
20030730084208 108536 TF_DR(%)
20030730084208 108550 话音信道掉话次数
20030730084208 108534 TF_DR(%)
20030730084208 108545 话音信道掉话次数

zosky 2003-07-30
  • 打赏
  • 举报
回复
把问题简化一点,太乱
txlicenhe 2003-07-30
  • 打赏
  • 举报
回复
friendly up
CrazyFor 2003-07-30
  • 打赏
  • 举报
回复
到底是什么差别,说一下!!

22,298

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧