2013-09-25 29 views
1

在我的數據庫中,我有多個「是/否」行的表,如果他們被選中,我想運行一些選擇檢查。計數數據庫中的選中項目

ITEM  ORDERED  ORDER_ID 
item1  true   1 
item2  false   1 
item3  true   2 
item4  true   3 
item5  true   4 
item6  true   4 

在我的代碼中的datagridview我想實現這一點。

ORDER  STATUS 
    1  not ordered 
    2  ordered 
    3  ordered 
    4  ordered 

在我的代碼,我會喜歡去通過所有的訂單,並檢查該訂單所訂購物品的狀態是。如果某些訂單上的所有商品都具有狀態爲真,那麼我想要在訂單表中設置另一個標誌爲爲真(訂購)。哪個是解決這個問題最優雅的方法?如果你有這樣的問題的例子,我會非常感激。提前致謝。

+0

點指出......問題是,我找不到正確的方式如何從數據庫中取出項目,檢查每個訂單項目的有序狀態。例子...如果order nr4有2個項目,並且都被選中,那麼我想將結果保存在某個布爾變量中。對於這個問題,我應該使用數據集還是有更合適的方法。 – Dave

回答

2

看起來STATUS表示該ORDER_ID的所有行是否有ORDERED = True。如果這是正確的,我認爲你可以通過Access聚合(GROUP BY)查詢得到你需要的。

True存儲爲-1,False存儲爲0.因此,如果ORDER_ID的任何ORDER_ID的最大值爲ORDERED爲0,則知道該訂單至少還有一個尚未排序的項目。如果最大值爲-1,則所有項目都已經訂購。

以詢問開始以確定每個ORDER_IDMax(ORDERED)

SELECT y.ORDER_ID, Max(y.ORDERED) AS MaxOfORDERED 
FROM YourTable AS y 
GROUP BY y.ORDER_ID; 

一旦你的工作,在另一個使用它作爲一個子查詢與IIf表達轉變MaxOfORDERED到你想要的STATUS文本。

SELECT 
    sub.ORDER_ID, 
    IIf(sub.MaxOfORDERED = 0, 'not ordered', 'ordered') AS STATUS 
FROM 
    (
     SELECT y.ORDER_ID, Max(y.ORDERED) AS MaxOfORDERED 
     FROM YourTable21030926a AS y 
     GROUP BY y.ORDER_ID 
    ) AS sub 
ORDER BY sub.ORDER_ID; 
+0

這個技巧。謝謝。 – Dave