2012-08-15 50 views
1

我想顯示兩個連接表的所有列,但只從其中一個列(即antsDescriptionCode)檢索具有nvarchar數據類型的唯一值。SQL - 如何檢索連接表中的唯一值(nvarchar)?

任何人都可以請幫忙嗎?謝謝。

我對當前的查詢,讓我顯示所有列兩個連接表中的一些條件:

select c.*, a.* 
from cats c 
join ants a on c.ctypeid = a.atypeid 
where 
    (c.CatsNo like 'cat4%' 
    or c.CatsNo like 'cat7%' 
    or c.CatsNo like 'cat8%') 
    and a.antsflagged = 0 
    and a.antsDescriptionCode in ('type a', 'type b', 'type c')! 

Refer to image for current get and expected output

我使用Microsoft SQL Server 2008

+0

您可以添加您當前獲得的輸出示例以及您想要獲得的輸出嗎? – Blorgbeard 2012-08-15 03:19:23

+0

嗨@Blorgbeard 我已更新我的問題。 fyi,我是新來的,不知道如何在我的問題/評論中顯示錶格,所以我上傳了一個文件供您參考。謝謝。 – ayuicyi 2012-08-15 05:04:40

+0

什麼類型的數據庫? AntsDescriptionCode對應於多個記錄,它應該如何確定要爲每個AntsDescriptionCode返回哪條記錄?這是有點不清楚你在找什麼。 – 2012-08-15 05:20:19

回答

1

假設你正在使用微軟SQL Server,你可以這樣做:

select * from (
select 
    c.*, a.*, 
    row_number() over (partition by a.antsDescriptionCode order by CatsNo) [row] 
from cats c 
join ants a on c.ctypeid = a.atypeid 
where 
    (c.CatsNo like 'cat4%' 
    or c.CatsNo like 'cat7%' 
    or c.CatsNo like 'cat8%') 
    and a.antsflagged = 0 
    and a.antsDescriptionCode in ('type a', 'type b', 'type c') 
) q where q.row=1 

這會給你第一行(訂購catsno)每個不同的antsDescriptionCode

它還會給你一個額外的列(稱爲「行」)1值。爲了擺脫這種情況,請將第一個*替換爲列的實際列表。

+0

謝謝。我想知道在哪裏定義q,因爲我得到一個錯誤「錯誤的語法靠近'q'」。 – ayuicyi 2012-08-15 05:57:53

+0

你確定你完全複製並粘貼了查詢嗎?我的電腦沒有出現語法錯誤。你在使用Microsoft SQL Server嗎?什麼版本? – Blorgbeard 2012-08-15 20:40:59

+0

我正在使用Microsoft SQL Server 2008.它仍然返回相同的錯誤。我想知道我做錯了什麼。 – ayuicyi 2012-08-16 04:28:04

0

由於您正在加入由兩個表中的多行共享的任意TypeID,因此您需要進一步定義數據。什麼決定了除了它的類型之外,許多Ant行中哪一行與該Cat相關聯?你只想返回給定類型的最高AntsID?進一步定義關係將創造一個更簡單,更強大的解決方案。沒有這個定義,這個問題的其他答案肯定就足夠了。

+0

感謝您的反饋。我實際上對SQL很陌生,所以我可能需要一些幫助來進一步闡述。如果你能用這個例子向我解釋,那將是一件好事。謝謝。 – ayuicyi 2012-08-15 06:02:38

+0

我想返回列'antsDescriptionCode'的唯一值。 – ayuicyi 2012-08-15 06:11:07

+0

好的,但是你的antsDescriptionCode在它的表中並不是唯一的。您已經在所有ATypeID 50中輸入了'輸入',但是有三種不同的AntsID。如果你想要唯一性,它需要是1個ID,1個TypeID和1個DescriptionCode。下一個ID將具有不同的TypeID和不同的DescriptionCode等。 – brazilianldsjaguar 2012-08-15 06:12:58