[英]SQL Join statement in iReport
我正在制作一份報告,該報告應該在我們的“WO”(workOrder表)和“SO”(salesOrder表)中顯示“PART”及其數量。 我相信我有格式化和其他一切已經完成,但由於任何原因我似乎無法通過我的連接語句得到我的邏輯。
我的邏輯基於 - 選擇PART_NUMBER顯示WO和SO中該部分的數量。 然后,它為SO和WO添加總列數,然后生成每個列的總計。
我是SQL的新手,已經在這個報告上工作了4天,似乎無法讓它工作。 我假設我的JOINS已關閉或某事。 任何可以提供的幫助將不勝感激!
SELECT
COALESCE(woitem.qtytarget,0) AS woallocated,
COALESCE(soitem.qtyfulfilled,0) AS soallocated,
PART."NUM" AS PART_NUM,
WO."NUM" AS WO_NUM,
PART."ID" AS PART_ID,
WO."ID" AS WO_ID,
PART."DESCRIPTION" AS PART_DESCRIPTION,
SO."ID" AS SO_ID,
SO."NUM" AS SO_NUM,
WOITEM."ID" AS WOITEM_ID,
WOITEM."QTYTARGET" AS WOITEM_QTYTARGET,
SOITEM."ID" AS SOITEM_ID,
SOITEM."QTYFULFILLED" AS SOITEM_QTYFULFILLED,
WOITEM."WOID" AS WOITEM_WOID,
WOITEM."PARTID" AS WOITEM_PARTID,
COMPANY."ID" AS COMPANY_ID,
COMPANY."NAME" AS COMPANY_NAME
FROM
"PART" PART
INNER JOIN "WO" WO ON PART."ID" = WO."ID"
INNER JOIN "SO" SO ON PART."ID" = SO."ID"
INNER JOIN "WOITEM" WOITEM ON PART."ID" = WOITEM."PARTID"
AND WO."ID" = WOITEM."WOID"
INNER JOIN "SOITEM" SOITEM ON SO."ID" = SOITEM."SOID",
"COMPANY" COMPANY
WHERE
PART."NUM"=$P{partNum}
我是SQL的新手,感謝我的邏輯中的任何幫助!
嘗試使用這個..你正在嘗試內部連接表並不真正相關所以你得到重復...創建2個查詢並使用UNION ALL聯合它們
SELECT
COALESCE(woitem.qtytarget,0) AS woallocated,
0 AS soallocated,
PART."NUM" AS PART_NUM,
WO."NUM" AS WO_NUM,
PART."ID" AS PART_ID,
WO."ID" AS WO_ID,
PART."DESCRIPTION" AS PART_DESCRIPTION,
NULL AS SO_ID,
NULL AS SO_NUM,
WOITEM."ID" AS WOITEM_ID,
WOITEM."QTYTARGET" AS WOITEM_QTYTARGET,
NULL AS SOITEM_ID,
0 AS SOITEM_QTYFULFILLED,
WOITEM."WOID" AS WOITEM_WOID,
WOITEM."PARTID" AS WOITEM_PARTID,
COMPANY."ID" AS COMPANY_ID,
COMPANY."NAME" AS COMPANY_NAME
FROM
"PART" PART
INNER JOIN "WOITEM" WOITEM ON PART."ID" = WOITEM."PARTID"
INNER JOIN "WO" WO ON WOITEM."WOID" = WO."ID",
"COMPANY" COMPANY
WHERE
PART."NUM"=$P{partNum}
UNION ALL
SELECT
0 AS woallocated,
COALESCE(soitem.qtyfulfilled,0) AS soallocated,
PART."NUM" AS PART_NUM,
NULL AS WO_NUM,
PART."ID" AS PART_ID,
NULL AS WO_ID,
PART."DESCRIPTION" AS PART_DESCRIPTION,
SO."ID" AS SO_ID,
SO."NUM" AS SO_NUM,
NULL AS WOITEM_ID,
0 AS WOITEM_QTYTARGET,
SOITEM."ID" AS SOITEM_ID,
SOITEM."QTYFULFILLED" AS SOITEM_QTYFULFILLED,
NULL AS WOITEM_WOID,
NULL AS WOITEM_PARTID,
COMPANY."ID" AS COMPANY_ID,
COMPANY."NAME" AS COMPANY_NAME
FROM
"PART" PART
INNER JOIN "PRODUCT" P ON PART."ID" = P."PARTID"
INNER JOIN "SOITEM" SOITEM ON P."ID" = SOITEM."PRODUCTID"
INNER JOIN "SO" SO ON SOITEM."SOID" = SO."ID",
"COMPANY" COMPANY
WHERE
PART."NUM"=$P{partNum}
在第一個查詢中僅選擇WO項目,然后將其加入SO項目。對於WO項目,SO字段將為空,反之亦然
SELECT
COALESCE(woitem.qtytarget,0) AS woallocated,
COALESCE(soitem.qtyfulfilled,0) AS soallocated,
PART.`NUM` AS PART_NUM,
WO.`NUM` AS WO_NUM,
PART.`ID` AS PART_ID,
WO.`ID` AS WO_ID,
PART.`DESCRIPTION` AS PART_DESCRIPTION,
SO.`ID` AS SO_ID,
SO.`NUM` AS SO_NUM,
WOITEM.`ID` AS WOITEM_ID,
WOITEM.`QTYTARGET` AS WOITEM_QTYTARGET,
SOITEM.`ID` AS SOITEM_ID,
SOITEM.`QTYFULFILLED` AS SOITEM_QTYFULFILLED,
WOITEM.`WOID` AS WOITEM_WOID,
WOITEM.`PARTID` AS WOITEM_PARTID,
COMPANY.`ID` AS COMPANY_ID,
COMPANY.`NAME` AS COMPANY_NAME
FROM
`PART` PART
INNER JOIN `WO` WO ON PART.`ID` = WO.`ID`
INNER JOIN `SO` SO ON PART.`ID` = SO.`ID`
INNER JOIN `WOITEM` WOITEM ON PART.`ID` = WOITEM.`PARTID`
AND WO.`ID` = WOITEM.`WOID`
INNER JOIN `SOITEM` SOITEM ON SO.`ID` = SOITEM.`SOID`,
`COMPANY` COMPANY
WHERE
PART.`NUM`=$P{partNum}
如果是語法錯誤,請使用```而不是"
。
希望這可以幫助
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.