我有以前的開發人員編寫的這個sql(下)。我怎樣才能將它分解成三個或四個部分,並再次將它們組合在一起而不是這個單一的大型SQL?請指教。我對sql很陌生,不知道如何簡化它。謝謝。我正在使用C#控制檯應用程序。如何分解這個很長的sql來簡化?
SELECT distinct
department_name CTG_DEPARTMENT,
chart_id SPC_CHART_ID,
concat(process_id, concat('-', item_name)) MONITOR_ITEM,
product_id CTG_PRODUCT,
graphtype SPC_GRAPH_TYPE,
CASE WHEN viorules LIKE '%9%' THEN 'OOS'
WHEN viorules LIKE '%10%' THEN 'OOS'
WHEN viorules IS NULL THEN 'OK'
ELSE 'OOC' END SPC_STATUS,
process_stage,
'L8B' fab_name
FROM
(
SELECT
'ARRAY' process_stage,
dept.item_name department_name,
dept.chart_id,
proc_id.item_name process_id,
item.item_name,
product.item_name product_id,
graphtype
FROM
(
SELECT
item_name,
chart_id
FROM
aryspch.c_ctg_filter f,
aryspch.c_ctg_item i,
aryspch.c_ctg_relate r
WHERE
GROUP_ID = 6
AND filter_name IN ('Department')
AND f.filter_id = i.filter_id
AND i.item_id = r.item_id
) dept
,
(
SELECT
item_name,
chart_id
FROM
aryspch.c_ctg_filter f,
aryspch.c_ctg_item i,
aryspch.c_ctg_relate r
WHERE
GROUP_ID = 6
AND filter_name IN ('Process_ID')
AND f.filter_id = i.filter_id
AND i.item_id = r.item_id
) proc_id
,
(
SELECT
item_name,
chart_id
FROM
aryspch.c_ctg_filter f,
aryspch.c_ctg_item i,
aryspch.c_ctg_relate r
WHERE
GROUP_ID = 6
AND filter_name IN ('Item')
AND f.filter_id = i.filter_id
AND i.item_id = r.item_id
) item
,
(
SELECT
item_name,
chart_id
FROM
aryspch.c_ctg_filter f,
aryspch.c_ctg_item i,
aryspch.c_ctg_relate r
WHERE
GROUP_ID = 6
AND filter_name IN ('Product')
AND f.filter_id = i.filter_id
AND i.item_id = r.item_id
) product
,
(
SELECT DISTINCT
chartid,
graphtype
FROM
aryspch.spchis
WHERE
reporttime > SYSDATE - 2
) a
WHERE
dept.chart_id = proc_id.chart_id
AND dept.chart_id = item.chart_id
AND dept.chart_id = product.chart_id
AND dept.chart_id = a.chartid
)
spc
LEFT JOIN
(
SELECT
viorules,
mtimestamp,
chartid
FROM
aryspch.oochis
)
oochis
ON spc.chart_id = oochis.chartid
AND mtimestamp > SYSDATE - 2
查看我編輯的SQL佈局。雖然現在有更多的線條,但它是完全相同的代碼,並顯示了正在連接在一起的單個查詢。有沒有什麼特別的關於這個查詢,你不明白,是壞了,還是需要重構? – MatBailie 2012-08-08 10:19:09