我正在使用Access 2010中的一些數據在SQL Server上工作,我沒有靈活性來更改,只能查詢。每個單獨的實體都有一個ID,並且可能有一個沒有特定最大或最小條目的屬性列表。創建此數據集的人所創建的解決方案是創建37個不同的屬性列集。對於每個屬性,有4列(儘管只有2列是有用的)。實際上,有148列表示可能有37個項目,雖然大多數列3或4以後的列都是NULL。儘管有一些一致性 - 值首先進入第一列組。只要任何列有空值,就可以假定它後面的每個列也都是空的。如果第一列爲空,則它沒有屬性。數據看起來有點像這樣:遍歷表列直到空值
| ID | Attr1 | Code1 | Attr2 | Code2 | Attr3 | Code3 | |----|-------|-------|--------|--------|--------|--------| | 1 | Foo | 2 | Bar | 1 | (null) | (null) | | 2 | Bar | 2 | (null) | (null) | (null) | (null) | | 3 | Bar | 1 | Foo | 1 | Bar | 2 |
什麼是對這個查詢,這樣,如果有人想抄本= 1(X爲任意數字),查詢返回的結果,即使該行有代碼1的最佳方式= 1或Code37 = 1。我認爲這樣做是這樣的:
A.Mod1=1
Or A.Mod2=1
Or A.Mod3=1
Or A.Mod4=1
...
但是,這看起來很醜陋,大概就像乾涸的山洪一樣。如果我想要同時定位屬性和代碼,這將變得特別可怕,我可能會這樣做。我簡單地查看了CASE,希望我能想到一種方法來使用它迭代並將第一個空值的值帶回給我,但是我的草稿沒有太大的意義,並且很亂嵌套。
有關如何通過上面建議的真正難看的方法來解決這些問題的任何想法?
你能做到直通查詢?在列中使用COALESCE關鍵字以相反的順序獲得列列表中的第一個非空值 – Jeremy
我可以做轉發,是的。那麼讓我快速看一下。 –
好的,這樣就可以接近我所需要的了。我想在此之後執行的其中一個步驟是能夠返回所有不爲空的值,這樣可以節省一些打字量。 我也希望能夠匹配特定值,這意味着我需要每次寫出表達式來合併,因爲「NOT NULL」不夠有意義。然後,我馬上回到開始使用OR語句的地方。 –