2014-03-31 53 views
-2

我有原始交易數據,有交易編號和卡號。不幸的是,卡號在交易的每一行都不重複,因此存在空白。我想通過卡號總結數據,所以我需要填補空白(我認爲)。如何處理數據庫原始數據中的空白?

我處理這個問題的方法是創建一個交易號碼和卡號的唯一查找,匹配卡號返回原始數據,然後通過卡號進行彙總。

我已經附上小圖:IMG

任何有助於改善這一過程,將不勝感激。擺脫查找步驟會很好!

+0

你說「和卡交易號碼的唯一查詢號碼」,但你將在原表的結果既不是這兩件事情 –

+0

你真的在數據庫中工作(如你標記的MySQL)或Excel? – Riz

+0

@scrowler:我的意思是所有交易號碼和相關卡號的列表。在MySQL術語中:選擇Transaction#和Card#,然後按Transaction#和Card#分組。 – Lucas

回答

2

只是一個,但例如應該工作:

SELECT r.cardId AS `Card Number`, 
     COUNT(*) AS `# of Transactions`, 
     SUM(t.sales) AS `Total Sales` 
    FROM transactions t 
    JOIN (SELECT transactionId, cardId 
      FROM transactions 
      WHERE cardId IS NOT NULL OR 
       cardId != '' 
     ) AS r 
     ON r.transactionId = t.transactionId 
GROUP BY t.transactionId 

基本上就是我做的是:

  • 在外選擇我們抓住所有由transactionId這樣,我們可以很容易地計算分組的結果交易次數和總額的銷售額。
  • 然後在連接上我基本上是過濾所以我們從沒有空或空的事務中獲取cardId

結果應該是你所描述的。

CARD NUMBER  # OF TRANSACTIONS TOTAL SALES 
     5845      3   141 
     3957      5   177 

Live DEMO


對於RAW +匹配結果:

SELECT t.transactionId, 
     r.cardId, 
     t.sales 
    FROM transactions t 
    JOIN (SELECT transactionId, cardId 
      FROM transactions 
     WHERE cardId IS NOT NULL OR 
       cardId != '' 
     ) AS r 
    ON r.transactionId = t.transactionId 

Live DEMO


要更新空的結果,你可以使用一個UPDATE是這樣的:

UPDATE transactions t 
    JOIN (SELECT transactionId, cardId 
      FROM transactions 
     WHERE cardId IS NOT NULL OR 
       cardId != '' 
     ) AS m 
    ON m.transactionId = t.transactionId 
    SET t.cardId = m.cardId 
WHERE t.cardId IS NULL OR 
     t.cardId = '' 

Live DEMO

+0

很好的答案Prix!效果很好。我如何通過這樣更新原始表格?理想情況下,能夠通過匹配交易ID來填寫卡號列中的空白。這有意義嗎? – Lucas

+0

Prix。你的傳奇。完美的作品。謝謝 ;) – Lucas

相關問題