我有一個項目的數據庫,它將每個可用的各種給定項目存儲在單獨的行上。僅僅通過項目名稱去,數據庫中的記錄是這樣的:試圖從數據庫中只返回一種類型的每個項目
10316-00-B
10316-00-M
10316-02-B
10316-03-B
10316-04-B
10316-23-B
10316-88-B
...其中「10316」是實際的項目,然後一切都代表特定品種類型之後。我想編寫一個查詢,該查詢只返回項目「10316」(或其中任何一個)的一條記錄,以及所有其他表列中與該項目相關的信息,並忽略其餘部分。所以我會得到項目「10316-00-B」的記錄,但沒有其他記錄。這個過程將重複我的查詢返回的所有其他項目。
我不挑剔給定組的哪個項目被返回;最高的人會做。我只是看到10316,10317,10318及以後的每個列表,而不是每個項目和變體。
我試過DISTINCT left(columnName,5),但那不會根據需要篩選記錄。有誰知道如何做到這一點?我正在使用Sql Server 2008 R2。
更新:我試圖實施由@ mo2提供的解決方案 - 看起來這個是最有可能返回給定項目的所有數據,這是我想要的。不幸的是,我收到錯誤「沒有列名稱被指定爲't'的第1列」,我不知道如何解決這個問題。我對他的查詢的版本是這樣的:
SELECT * FROM (
select left(item, 5), col1, col2, ... , row_number()
over (partition by LEFT(item, 5) order by item) rn
from Table
) t
where rn = 1
最後更新:我標誌着@kbball答案的解決方案,但真正的信貸應該去@ MO2爲好。 @kbball的答案幫助我理解了@ mo2的答案。
我想您的解決方案,但我不知道,「T」是應該做的是右括號之後。我收到錯誤「沒有爲't'的列1指定列名。」 – bmurrell30
「t」只是我認爲sql服務器需要的子查詢的別名。您可以嘗試單獨運行子查詢來了解其工作原理。不知道爲什麼你看到查詢時發生錯誤。 – mo2