2012-08-15 52 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