我有2個SQL查詢需要合併爲一個,這是由於數據庫的絕對大小(大部分零售商店位置,但很好,但有些交易要多得多)SQL查詢(Sybase):根據另一列的總和減去1取決於另一列的值
基本上,我需要每個員工在特定日期的交易數量。爲此,我計算每個員工的不同交易數量(交易中的每個項目都有相同的交易編號,因此它需要不同)。但是,有一列「txnvoidmod」。基本上我們的目標是,如果這個列的值是0,我只是簡單地計數交易,但如果這個值是1,我需要減去一個,因爲交易實際上是無效的。
下面是一些示例數據
+------ -+------------+-------------+
|transnum| txnvoidmod | salesprsnid |
+--------+------------+-------------+
| 115568 | 0 | 1339 |
| 115568 | 0 | 1339 |
| 114566 | 0 | 1339 |
| 114566 | 0 | 1339 |
| 115504 | 0 | 2555 |
| 105551 | 0 | 0452 |
| 105551 | 0 | 0452 |
| 105551 | 0 | 0452 |
| 105552 | 1 | 0452 |
| 105552 | 1 | 0452 |
| 105552 | 1 | 0452 |
+--------+------------+-------------+
我省略一些字段是不必要的這個例子。
這裏是我使用
select txn_pos_transactions.cashiernum as salesprsnid,
(count(distinct MS.transnum))as transcnt
from Txn_Merchandise_Sale MS
INNER JOIN txn_pos_transactions ON MS.transnum=txn_pos_transactions.transnum
Where MS.modtime like '2013-06-01 %' AND MS.itemdatetime like '2013-06-01 %'
and (txnvoidmod=0 or txnvoidmod=1)
Group by txn_pos_transactions.cashiernum order by salesprsnid
我離開了一個事實,即該查詢也查詢出售純銷售單位查詢,所以我必須考慮到這一點。對於這個查詢的一些樣品的結果(包括省略純銷售和單位部分,其是相當冗長)
+------ -+------------+-------------+-------------+
|transcnt| unitssold | salesprsnid | netsalesamt |
+--------+------------+-------------+-------------+
| 2 | 5 | 1339 | 98.50 |
| 1 | 2 | 2555 | 35.20 |
| 2 | 1 | 0452 | 24.00 |
+--------+------------+-------------+-------------+
從上面,ID爲「0452」的僱員具有的結果(transcnt)2交易,但是,我需要構建我的查詢,以便它實際讀取爲0個事務,因爲它們的1個事務的txnvoidmod等於1,實際上是其中txnvoidmod = 0的前一個事務的無效。如果我只在where子句中說「txnvoidmod = 0」,那麼「0452」將有1個事務,但我仍然需要減去事務,其中txnvoidmod = 1我試過各種東西,如條件並減去txnvoidmod的值,但無濟於事,因爲它試圖通過txnvoidmod給我不必要的行進行分組。我需要每個salesprsnid只有一行。
任何建議將是偉大的,謝謝。
順便說一句,我正在使用SAP Sybase數據庫..它似乎在大多數情況下查詢是相同的,但他們缺少的一些項目的例外是相同的。
爲什麼在where子句中有'或txnvoidmod = 1'?你不想排除這些記錄嗎? –
我剛剛意識到我的問題略有誤解。我不僅需要對它們進行計數,還需要在txnvoidmod = 1時減去一個。原因是因爲有一個相應的事務,其中txnvoidmod = 0,那麼當事務無效時,它將作爲txnvoidmod = 1的另一個事務進入。因此,我只能在txnvoidmod = 0時對不同的交易進行計數,然後在txnvoidmod等於1的每個交易中減1。我編輯原始帖子以反映此情況 – mtotho