SQL问题,求大神解决~!!

wangyu0438 2013-06-04 02:38:07
SELECT Q.NAME DEVICE_NAME,T.NAME T_NAME,B.AVE,B.SD,SUM(CASE WHEN D.OUT_OF_CONTROL=1 THEN 1 ELSE 0 END)OUT_OF_CONTROL_TIME, COUNT(D.ID)TEST_TIME,D.TEST_ID,B.Batch_No,
POWER(AVG(CASE WHEN D.ISCALPOINT=0 THEN POWER(D.TEST_VAL-SSS,2)ELSE NULL END),0.5),
AVG(CASE WHEN D.ISCALPOINT=0 THEN D.TEST_VAL WHEN D.ISCALPOINT IS NULL THEN D.TEST_VAL ELSE NULL END)SSS
FROM QC_QCTEST_DATA D,QC_TEST T,QC_DEVICE Q,QC_QCTEST_BATCH B
WHERE D.DEV_ID=1715
AND TO_CHAR(D.TEST_DATE_TIME,'yyyy-MM')='2013-05'
AND B.TYPE=2
AND D.BATCH_ID=B.ID
AND D.DEV_ID=Q.ID
AND D.TEST_ID=T.ID
GROUP BY D.TEST_ID,Q.NAME,T.NAME,B.AVE,B.SD,B.TYPE,B.Batch_No



怎么写可以将下面红色SSS内容加到上面红色的位置进行计算???现在sql语句是错的
...全文
246 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
小语8023 2013-06-06
  • 打赏
  • 举报
回复
好复杂的sql
wangyu0438 2013-06-06
  • 打赏
  • 举报
回复
引用 12 楼 forgetsam 的回复:
[quote=引用 10 楼 u010236854 的回复:] [quote=引用 8 楼 forgetsam 的回复:]
select tmp.*,POWER(AVG(CASE WHEN D.ISCALPOINT=0 THEN POWER(D.TEST_VAL-SSS,2)ELSE NULL END),0.5) ot1 from 
(SELECT Q.NAME DEVICE_NAME,T.NAME T_NAME,B.AVE,B.SD,SUM(CASE WHEN D.OUT_OF_CONTROL=1 THEN 1 ELSE 0 END)OUT_OF_CONTROL_TIME, COUNT(D.ID)TEST_TIME,D.TEST_ID,B.Batch_No,
        AVG(CASE WHEN D.ISCALPOINT=0 THEN D.TEST_VAL WHEN D.ISCALPOINT IS NULL THEN D.TEST_VAL ELSE NULL END)SSS
        FROM QC_QCTEST_DATA D,QC_TEST T,QC_DEVICE Q,QC_QCTEST_BATCH B 
        WHERE D.DEV_ID=1715
        AND TO_CHAR(D.TEST_DATE_TIME,'yyyy-MM')='2013-05'
        AND B.TYPE=2
        AND D.BATCH_ID=B.ID
        AND D.DEV_ID=Q.ID
        AND D.TEST_ID=T.ID 
        GROUP BY D.TEST_ID,Q.NAME,T.NAME,B.AVE,B.SD,B.TYPE,B.Batch_No)tmp
因为D.TEST_VAL那不行 [/quote] 给里面的查询列再加个d.test不就完了。[/quote]
引用 12 楼 forgetsam 的回复:
[quote=引用 10 楼 u010236854 的回复:] [quote=引用 8 楼 forgetsam 的回复:]
select tmp.*,POWER(AVG(CASE WHEN D.ISCALPOINT=0 THEN POWER(D.TEST_VAL-SSS,2)ELSE NULL END),0.5) ot1 from 
(SELECT Q.NAME DEVICE_NAME,T.NAME T_NAME,B.AVE,B.SD,SUM(CASE WHEN D.OUT_OF_CONTROL=1 THEN 1 ELSE 0 END)OUT_OF_CONTROL_TIME, COUNT(D.ID)TEST_TIME,D.TEST_ID,B.Batch_No,
        AVG(CASE WHEN D.ISCALPOINT=0 THEN D.TEST_VAL WHEN D.ISCALPOINT IS NULL THEN D.TEST_VAL ELSE NULL END)SSS
        FROM QC_QCTEST_DATA D,QC_TEST T,QC_DEVICE Q,QC_QCTEST_BATCH B 
        WHERE D.DEV_ID=1715
        AND TO_CHAR(D.TEST_DATE_TIME,'yyyy-MM')='2013-05'
        AND B.TYPE=2
        AND D.BATCH_ID=B.ID
        AND D.DEV_ID=Q.ID
        AND D.TEST_ID=T.ID 
        GROUP BY D.TEST_ID,Q.NAME,T.NAME,B.AVE,B.SD,B.TYPE,B.Batch_No)tmp
因为D.TEST_VAL那不行 [/quote] 给里面的查询列再加个d.test不就完了。[/quote] 不能加。。。每个d.test_val值不一样
forgetsam 2013-06-06
  • 打赏
  • 举报
回复
引用 10 楼 u010236854 的回复:
[quote=引用 8 楼 forgetsam 的回复:]
select tmp.*,POWER(AVG(CASE WHEN D.ISCALPOINT=0 THEN POWER(D.TEST_VAL-SSS,2)ELSE NULL END),0.5) ot1 from 
(SELECT Q.NAME DEVICE_NAME,T.NAME T_NAME,B.AVE,B.SD,SUM(CASE WHEN D.OUT_OF_CONTROL=1 THEN 1 ELSE 0 END)OUT_OF_CONTROL_TIME, COUNT(D.ID)TEST_TIME,D.TEST_ID,B.Batch_No,
        AVG(CASE WHEN D.ISCALPOINT=0 THEN D.TEST_VAL WHEN D.ISCALPOINT IS NULL THEN D.TEST_VAL ELSE NULL END)SSS
        FROM QC_QCTEST_DATA D,QC_TEST T,QC_DEVICE Q,QC_QCTEST_BATCH B 
        WHERE D.DEV_ID=1715
        AND TO_CHAR(D.TEST_DATE_TIME,'yyyy-MM')='2013-05'
        AND B.TYPE=2
        AND D.BATCH_ID=B.ID
        AND D.DEV_ID=Q.ID
        AND D.TEST_ID=T.ID 
        GROUP BY D.TEST_ID,Q.NAME,T.NAME,B.AVE,B.SD,B.TYPE,B.Batch_No)tmp
因为D.TEST_VAL那不行 [/quote] 给里面的查询列再加个d.test不就完了。
wangyu0438 2013-06-05
  • 打赏
  • 举报
回复
引用 7 楼 flagiris 的回复:
[quote=引用 6 楼 u010236854 的回复:] [quote=引用 4 楼 hbu_zhy 的回复:] 上边的“SSS”是不能够引用下边的“SSS”的。 建议你把“SSS”部分抽出来写,把结果当变量传给这个sql。 你也可以试试写子查询。
我最后就写的子查询,怎么实现“结果当变量传给这个sql”[/quote] 存储过程可以么? 要不用两条语句?[/quote] 我不会存储过程,子查询可以做出来
wangyu0438 2013-06-05
  • 打赏
  • 举报
回复
引用 8 楼 forgetsam 的回复:
select tmp.*,POWER(AVG(CASE WHEN D.ISCALPOINT=0 THEN POWER(D.TEST_VAL-SSS,2)ELSE NULL END),0.5) ot1 from 
(SELECT Q.NAME DEVICE_NAME,T.NAME T_NAME,B.AVE,B.SD,SUM(CASE WHEN D.OUT_OF_CONTROL=1 THEN 1 ELSE 0 END)OUT_OF_CONTROL_TIME, COUNT(D.ID)TEST_TIME,D.TEST_ID,B.Batch_No,
        AVG(CASE WHEN D.ISCALPOINT=0 THEN D.TEST_VAL WHEN D.ISCALPOINT IS NULL THEN D.TEST_VAL ELSE NULL END)SSS
        FROM QC_QCTEST_DATA D,QC_TEST T,QC_DEVICE Q,QC_QCTEST_BATCH B 
        WHERE D.DEV_ID=1715
        AND TO_CHAR(D.TEST_DATE_TIME,'yyyy-MM')='2013-05'
        AND B.TYPE=2
        AND D.BATCH_ID=B.ID
        AND D.DEV_ID=Q.ID
        AND D.TEST_ID=T.ID 
        GROUP BY D.TEST_ID,Q.NAME,T.NAME,B.AVE,B.SD,B.TYPE,B.Batch_No)tmp
因为D.TEST_VAL那不行
wangyu0438 2013-06-05
  • 打赏
  • 举报
回复
引用 8 楼 forgetsam 的回复:
select tmp.*,POWER(AVG(CASE WHEN D.ISCALPOINT=0 THEN POWER(D.TEST_VAL-SSS,2)ELSE NULL END),0.5) ot1 from 
(SELECT Q.NAME DEVICE_NAME,T.NAME T_NAME,B.AVE,B.SD,SUM(CASE WHEN D.OUT_OF_CONTROL=1 THEN 1 ELSE 0 END)OUT_OF_CONTROL_TIME, COUNT(D.ID)TEST_TIME,D.TEST_ID,B.Batch_No,
        AVG(CASE WHEN D.ISCALPOINT=0 THEN D.TEST_VAL WHEN D.ISCALPOINT IS NULL THEN D.TEST_VAL ELSE NULL END)SSS
        FROM QC_QCTEST_DATA D,QC_TEST T,QC_DEVICE Q,QC_QCTEST_BATCH B 
        WHERE D.DEV_ID=1715
        AND TO_CHAR(D.TEST_DATE_TIME,'yyyy-MM')='2013-05'
        AND B.TYPE=2
        AND D.BATCH_ID=B.ID
        AND D.DEV_ID=Q.ID
        AND D.TEST_ID=T.ID 
        GROUP BY D.TEST_ID,Q.NAME,T.NAME,B.AVE,B.SD,B.TYPE,B.Batch_No)tmp
这个不行,因为红色那个位置
forgetsam 2013-06-05
  • 打赏
  • 举报
回复
select tmp.*,POWER(AVG(CASE WHEN D.ISCALPOINT=0 THEN POWER(D.TEST_VAL-SSS,2)ELSE NULL END),0.5) ot1 from 
(SELECT Q.NAME DEVICE_NAME,T.NAME T_NAME,B.AVE,B.SD,SUM(CASE WHEN D.OUT_OF_CONTROL=1 THEN 1 ELSE 0 END)OUT_OF_CONTROL_TIME, COUNT(D.ID)TEST_TIME,D.TEST_ID,B.Batch_No,
        AVG(CASE WHEN D.ISCALPOINT=0 THEN D.TEST_VAL WHEN D.ISCALPOINT IS NULL THEN D.TEST_VAL ELSE NULL END)SSS
        FROM QC_QCTEST_DATA D,QC_TEST T,QC_DEVICE Q,QC_QCTEST_BATCH B 
        WHERE D.DEV_ID=1715
        AND TO_CHAR(D.TEST_DATE_TIME,'yyyy-MM')='2013-05'
        AND B.TYPE=2
        AND D.BATCH_ID=B.ID
        AND D.DEV_ID=Q.ID
        AND D.TEST_ID=T.ID 
        GROUP BY D.TEST_ID,Q.NAME,T.NAME,B.AVE,B.SD,B.TYPE,B.Batch_No)tmp
菖蒲老先生 2013-06-05
  • 打赏
  • 举报
回复
引用 6 楼 u010236854 的回复:
[quote=引用 4 楼 hbu_zhy 的回复:] 上边的“SSS”是不能够引用下边的“SSS”的。 建议你把“SSS”部分抽出来写,把结果当变量传给这个sql。 你也可以试试写子查询。
我最后就写的子查询,怎么实现“结果当变量传给这个sql”[/quote] 存储过程可以么? 要不用两条语句?
wangyu0438 2013-06-05
  • 打赏
  • 举报
回复
引用 4 楼 hbu_zhy 的回复:
上边的“SSS”是不能够引用下边的“SSS”的。 建议你把“SSS”部分抽出来写,把结果当变量传给这个sql。 你也可以试试写子查询。
我最后就写的子查询,怎么实现“结果当变量传给这个sql”
Kun_Guan 2013-06-04
  • 打赏
  • 举报
回复
把所要的数据先做个临时表好了,然后比较好用点,觉得
hbu_zhy 2013-06-04
  • 打赏
  • 举报
回复
上边的“SSS”是不能够引用下边的“SSS”的。 建议你把“SSS”部分抽出来写,把结果当变量传给这个sql。 你也可以试试写子查询。
wangyu0438 2013-06-04
  • 打赏
  • 举报
回复
引用 2 楼 panzhixiong_cn 的回复:
好复杂啊,怎么出来的呢?效率怎么样?
没办法。。。业务需要,愁死我了
panzhixiong_cn 2013-06-04
  • 打赏
  • 举报
回复
好复杂啊,怎么出来的呢?效率怎么样?
wangyu0438 2013-06-04
  • 打赏
  • 举报
回复
来人啊~!!!!!!!

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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