道歉的模糊標題,但這是更多的徵求建議,而不是尋找直接的答案。作爲參考,我正在使用SSMS 2014.查詢尷尬存儲的數據
我正在處理一個我沒有創建的數據庫,並且我正努力使用當前格式的數據。我列出了下表中的一個例子。
+-----+----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+
|DtID | ID | Mo1 | Mo2 | Tu1 | Tu2 | We1 | We2 | Th1 | Th2 | Fr1 | Fr2 |
+-----+----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+
| 565 | 12 | 0 | 1 | 0 | 1 | 1 | 0 | 0 | 0 | 1 | 0 |
| 565 | 13 | 0 | 0 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 |
| 565 | 14 | 0 | 1 | 1 | 1 | 0 | 0 | 1 | 1 | 1 | 0 |
| 565 | 15 | 1 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 1 |
| 572 | 12 | 0 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 |
| 572 | 13 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 1 |
| 572 | 14 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 1 | 0 | 0 |
| 572 | 15 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 0 |
+-----+----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+
DTID一個星期開始日期標識符,ID是一個人標識,MO1代表週一上午,MO2週一下午,等1意味着人出席了會議。該表超過600k行。
我試圖查詢特定日期範圍之間的數據時發生問題,例如說我想在日期標識566和575之間找到目前出席標記的總和。日期566將引用星期二開始565,並且575將指星期四開始572.
我會更舒適的表格格式在下面的表格(以第1行爲例)。
+-----+----+------+---------+
|DtID | ID | AMPM | Present |
+-----+----+------+---------+
| 565 | 12 | 1 | 0 |
| 565 | 12 | 2 | 1 |
| 566 | 12 | 1 | 0 |
| 566 | 12 | 2 | 1 |
| 567 | 12 | 1 | 1 |
| 567 | 12 | 2 | 0 |
| 568 | 12 | 1 | 0 |
| 568 | 12 | 2 | 0 |
| 569 | 12 | 1 | 1 |
| 569 | 12 | 2 | 0 |
+-----+----+------+---------+
這可能嗎?有沒有一種有效的方式來查詢數據?我對SQL很陌生,到目前爲止,我幾乎所有的學習都來自於解釋本網站上的問題和解答。正如我所說,我並不真正瞭解我所尋找的答案,因此,這裏的用戶的集體建議和智慧對我來說非常有用。
非常感謝。
你說得對。第二種表示比第一種更有意義。我會爭辯說,現有的桌子設計是有缺陷的,但是我們必須與我們所得到的一起工作。有許多方法可以以所需的形式獲得它。你可以交叉連接到另一個表將1行變成10(這是你想要的) - 這裏是一個例子:http://stackoverflow.com/questions/40866952/merge-start-and-end-columns-to-one -column/40867201#40867201。您可以全部使用10個「聯合」,但查詢規劃人員通常難以對其進行優化。 –
儘管做了很多工作,但如果數據庫設計始終如此「尷尬」,並且您必須進行大量報告,則可以構建數據倉庫 –
我認爲第二個設計也有缺陷,因爲它使得真的沒有工作日的代表。由於沒有其他標準可以進行排序,所以不可能確定第二個表格中的哪一天指的是哪一天。 –