2012-10-31 43 views
1

我有一個PICK表SQL語句返回訂單的標題/明細記錄。 SQL中的一個字段基本上是一個字段,用於說明是否存在危險物品。如果訂單上的單個產品有反對它的代碼,那麼報告應顯示其危險。SQL-使所有行顯示列值如果其中一個行有它

我遇到的問題是,在SQL結果中,因爲我將代碼放在報頭部分(而不是詳細信息部分)的報表中,所以它僅在第一行查找代碼。

有沒有辦法通過SQL來基本上說「如果這些行之一有這個代碼,使所有這些行都有這個代碼」?我猜一個子選擇會在這裏工作......問題是,我正在使用構建在FoxPro上的遺留系統,並且FoxPro SQL非常糟糕!

編輯:剛纔檢查,我跑VFP8,在FVP9添加在SELECT語句子查詢:(

+0

如果我正確地讀你的問題,頭包含危險品字段,如果標題包含危險貨物的有效值,那麼所有細節記錄都需要包含該字段。如果是這種情況,你有沒有試過'CROSS JOIN'? – JoeFletch

+0

嗨。不,詳細記錄包含危險物品代碼。如果一個字段有危險品代碼,我需要所有字段都有代碼,這樣報表設計人員才能拿起這個字段(如在報告中,字段在標題上,而標題在最後一行返回的SQL)。我幾乎需要在危險貨物列上使用聚合(如MAX)...... – Lock

回答

0
SELECT Header.HeaderId, Header.HeaderDescription, 
    Detail.DetailId, Detail.DetailDescription, Detail.Dangerous, 
    Danger.DangerousItems 
FROM Header 
INNER JOIN Detail ON Header.HeaderId = Detail.HeaderId 
LEFT OUTER JOIN 
    (SELECT HeaderId, COUNT(*) AS DangerousItems FROM Detail WHERE Dangerous = 1 GROUP BY HeaderId) Danger ON Header.HeaderId = Danger.HeaderId 

如果Danger.DangerousItems> 0,則什麼是危險的,如果它爲NULL,則沒有什麼是危險的。

如果你不能做到嵌套查詢,那麼你應該能夠創建一個視圖類對象(稱爲VFP8一個query)爲嵌套查詢:

SELECT HeaderId, COUNT(*) AS DangerousItems FROM Detail WHERE Dangerous = 1 GROUP BY HeaderId 

然後你可以離開嗎?

+0

VFP8不支持派生表 - 子句中的子查詢:( – Lock

+0

好吧,但是如何在嵌套的select上創建查詢並加入,如所建議的? –

+0

我將不得不考慮到這一點。我真的沒有訪問權限添加視圖到數據庫 - 那麼你提出的是不是嗎?創建一個視圖(我來自甲骨文),並加入到它,如果它的表? – Lock

0

在VFP 8和更早的版本,你最好的賭注是連續使用三個查詢:

SELECT Header.HeaderId,Header.HeaderDescription, Detail.DetailId,Detail.DetailDescription,Detail.Dangerous, 危險.DangerousItems From頭 INNER JOIN詳細ON Header.HeaderId = Detail.HeaderId INTO CURSOR csrDetail

SELECT HeaderId,COUNT(*)AS DangerousItems FROM詳細 WHERE危險 GROUP BY HeaderI d INTO CURSOR csrDanger

SELECT csrDetail。*,csrDanger.DangerousItems FROM csrDetail.HeaderID = csrDanger.HeaderID INTO CURSOR csrResult

+0

不幸的是,這也不起作用。該軟件基本上爲您建立您的查詢..因爲它有一個SELECT,FROM,WHERE,GROUPBY,HAVING,INTO和OR​​DERBY子句的文本框。它從這些構建SQL,所以我不明白我將如何能夠放入多個查詢。 – Lock

相關問題