无法将查询从Oracle SQL传输到具有多个联接的MS SQL

阿米什特

我在Oracle中有一个SQL查询正在执行并提供正确的结果。但是,在MS SQL中,我在表连接方面遇到了问题,因此需要类似的结果。

以下是我的Oracle SQL

SELECT
    number_of_inspection.line,
    number_of_inspection.week,
    number_of_inspection.total_records,
    ( visual_fails.fails + qc_fails.fails ) total_fails,
    nvl(round((100 / number_of_inspection.total_records) *(visual_fails.fails + qc_fails.fails), 2), 0) percentage_fails
FROM
    (
        SELECT
            COUNT(*) total_records,
            line,
            to_char(inspection_date, 'IW') week
        FROM
            master_table
        WHERE
            to_char(inspection_date, 'YYYY') = to_char(sysdate, 'YYYY')
            AND inspection_date >= add_months(sysdate, - 3)
        GROUP BY
            line,
            to_char(inspection_date, 'IW')
    ) number_of_inspection,
    (
        SELECT
            line,
            to_char(inspection_date, 'IW') week,
            COUNT(*) fails
        FROM
            master_table
        WHERE
            to_char(inspection_date, 'YYYY') = to_char(sysdate, 'YYYY')
            AND visual_inspection = 'FAIL'
        GROUP BY
            line,
            to_char(inspection_date, 'IW')
    ) visual_fails,
    (
        SELECT
            line,
            to_char(inspection_date, 'IW') week,
            COUNT(*) fails
        FROM
            master_table
        WHERE
            to_char(inspection_date, 'YYYY') = to_char(sysdate, 'YYYY')
            AND visual_inspection != 'FAIL'
            AND nvl(qc_inspection, 'FAIL') = 'FAIL'
        GROUP BY
            line,
            to_char(inspection_date, 'IW')
    ) qc_fails
WHERE
    number_of_inspection.line = visual_fails.line (+)
    AND number_of_inspection.week = visual_fails.week (+)
    AND number_of_inspection.line = qc_fails.line (+)
    AND number_of_inspection.week = qc_fails.week (+)

我在Oracle中得到的正确结果是:

+--------+------+---------------+------------+-----------------+
| LINE   | WEEK | TOTAL_RECORDS |TOTAL_FAILS | PERCENTAGE_FAILS|
+--------+------+---------------+------------+-----------------+
| Line 1 |  08  |   845         |    6       |   0.71          |
| Line 2 |  08  |   1790        |    11      |   0.61          |
| Line 1 |  09  |   350         |    9       |   2.57          |
| Line 2 |  09  |   1125        |    20      |   1.77          |
+--------+------+---------------+------------+-----------------+

以下是我的MS SQL查询:

SELECT number_of_inspection.line, 
       number_of_inspection.week_no, 
       number_of_inspection.total_records, 
       ( visual_fails.fails + qc_fails.fails ) total_fails, 
       Isnull(Round(( 100 / number_of_inspection.total_records ) * ( 
                           visual_fails.fails + qc_fails.fails ), 2), 0) 
                                               percentage_fails 
FROM   (SELECT Count(*)                        total_records, 
               line, 
               Datepart(ww, [inspection date]) Week_No 
        FROM   master_table 
        WHERE  Year([inspection date]) = Year(Getdate()) 
               AND [inspection date] >= Dateadd(month, -1, Getdate()) 
        GROUP  BY line, 
                  Datepart(ww, [inspection date])) number_of_inspection, 
       (SELECT line, 
               Datepart(ww, [inspection date]) AS Week_No, 
               Count(*)                        AS fails 
        FROM   master_table 
        WHERE  Year([inspection date]) = Year(Getdate()) 
               AND [visual inspection] = 'FAIL' 
        GROUP  BY line, 
                  Datepart(ww, [inspection date])) visual_fails, 
       (SELECT line, 
               Datepart(ww, [inspection date]) AS Week_No, 
               Count(*)                        AS fails 
        FROM   master_table 
        WHERE  Year([inspection date]) = Year(Getdate()) 
               AND [visual inspection] != 'FAIL' 
               AND Isnull([qc inspection], 'FAIL') = 'FAIL' 
        GROUP  BY line, 
                  Datepart(ww, [inspection date])) qc_fails, 
       where number_of_inspection 
       LEFT OUTER JOIN visual_fails 
                    ON number_of_inspection.line = visual_fails.line 
                       -- join issue 
                       AND number_of_inspection 
       LEFT OUTER JOIN visual_fails 
                    ON number_of_inspection.week_no = visual_fails.week_no 
                       -- join issue 
                       AND number_of_inspection 
       LEFT OUTER JOIN qc_fails 
                    ON number_of_inspection.line = qc_fails.line -- join issue 
                       AND number_of_inspection 
       LEFT OUTER JOIN qc_fails 
                    ON number_of_inspection.week_no = qc_fails.week_no -- join issue 

我知道我们在MS SQL的FROM子句联接,与Oracle不同,我们也可以在WHERE子句联接

当我尝试执行MS SQL查询时,出现以下错误:

Incorrect syntax near the keyword 'WHERE'.

注意:我正在使用SQL Server 2014,因此无法更改数据库change Compatibility Level

您能帮我解决我在MS SQL查询中做错的事情吗?

戈登·利诺夫

我会在两个数据库中使用条件聚合。这是SQL Server中的想法:

select line, datepart(week, [Inspection Date]), 
       count(*) total_records,
       sum(case when visual_inspection = 'FAIL' then 1 else 0 end) as num_visual_fails,
       sum(case when [QC Inspection] = 'FAIL' or [QC Inspection] is null then 1 else 0 end) as num_qc_fails,
       avg(case when visual_inspection = 'FAIL' or
                     [QC Inspection] = 'FAIL' or
                     [QC Inspection] is null
                then 1.0 else 0
            end) as fail_ratio
       . . . 
from master_table
where year(inspection_date) = year(getdate()) and
      inspection_date >= dateadd(month, -3, getdate())
group by line, datepart(week, [Inspection Date]);

这不完全是您的查询。但这应该为您提供有关如何解决问题的正确思路。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

卡在具有多个联接的SQL查询上

来自分类Dev

具有多个子查询联接的SQL语法错误

来自分类Dev

具有多个联接的SQL查询会影响性能

来自分类Dev

EF:如何执行具有多个联接的SQL查询?

来自分类Dev

无法将示例数据库从“凡人的SQL查询”加载到Oracle的SQL Developer中

来自分类Dev

SQL查询多个表,具有多个联接和带有逗号分隔列表的列字段

来自分类Dev

尝试将具有单个引用的SQL Server表联接到具有多个引用的表

来自分类Dev

具有左联接的SQL查询联合

来自分类Dev

具有内部联接的SQL子查询

来自分类Dev

SQL Server查询具有日期的联接

来自分类Dev

是否可以将 MS SQL 结果传输到新的 MS Excel 文件?

来自分类Dev

将Odata查询传输到SQL语句Java

来自分类Dev

无法正确使用子查询(Oracle SQL)

来自分类Dev

将查询从Oracle迁移到SQL Server

来自分类Dev

将Oracle查询转换为SQL Server?

来自分类Dev

将 postgres sql 查询转换为 oracle

来自分类Dev

如何使用cmd将数据从较新的MS SQL服务器传输到较旧的MS SQL Server?

来自分类Dev

具有多个postmeta左联接的Wordpress自定义SQL查询

来自分类Dev

具有多个内部联接的SQL查询返回错误的值计数

来自分类Dev

如何改进具有多个联接和子查询的表上的摘要SQL?

来自分类Dev

从SQL修改/展平结果到具有多个联接的一对多查询

来自分类Dev

将具有同一表的多个联接(具有多个条件)的SQL转换为LINQ

来自分类Dev

具有多个条件的 Oracle SQL 连接子查询

来自分类Dev

如何配置logstash将数据从MS-SQL服务器传输到elasticsearch

来自分类Dev

SQL 查询 (Oracle SQL)

来自分类Dev

无法将SQL查询转换为Django

来自分类Dev

SQL查询联接多个表

来自分类Dev

SQL查询-多个内部联接

来自分类Dev

SQL左联接具有多个值

Related 相关文章

  1. 1

    卡在具有多个联接的SQL查询上

  2. 2

    具有多个子查询联接的SQL语法错误

  3. 3

    具有多个联接的SQL查询会影响性能

  4. 4

    EF:如何执行具有多个联接的SQL查询?

  5. 5

    无法将示例数据库从“凡人的SQL查询”加载到Oracle的SQL Developer中

  6. 6

    SQL查询多个表,具有多个联接和带有逗号分隔列表的列字段

  7. 7

    尝试将具有单个引用的SQL Server表联接到具有多个引用的表

  8. 8

    具有左联接的SQL查询联合

  9. 9

    具有内部联接的SQL子查询

  10. 10

    SQL Server查询具有日期的联接

  11. 11

    是否可以将 MS SQL 结果传输到新的 MS Excel 文件?

  12. 12

    将Odata查询传输到SQL语句Java

  13. 13

    无法正确使用子查询(Oracle SQL)

  14. 14

    将查询从Oracle迁移到SQL Server

  15. 15

    将Oracle查询转换为SQL Server?

  16. 16

    将 postgres sql 查询转换为 oracle

  17. 17

    如何使用cmd将数据从较新的MS SQL服务器传输到较旧的MS SQL Server?

  18. 18

    具有多个postmeta左联接的Wordpress自定义SQL查询

  19. 19

    具有多个内部联接的SQL查询返回错误的值计数

  20. 20

    如何改进具有多个联接和子查询的表上的摘要SQL?

  21. 21

    从SQL修改/展平结果到具有多个联接的一对多查询

  22. 22

    将具有同一表的多个联接(具有多个条件)的SQL转换为LINQ

  23. 23

    具有多个条件的 Oracle SQL 连接子查询

  24. 24

    如何配置logstash将数据从MS-SQL服务器传输到elasticsearch

  25. 25

    SQL 查询 (Oracle SQL)

  26. 26

    无法将SQL查询转换为Django

  27. 27

    SQL查询联接多个表

  28. 28

    SQL查询-多个内部联接

  29. 29

    SQL左联接具有多个值

热门标签

归档