1

我正在尝试显示两个连接表的所有列,但仅从antsDescriptionCode数据类型为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')!

有关当前获取和预期输出的信息,请参阅图像

我正在使用 Microsoft SQL Server 2008。

4

2 回答 2

1

假设您使用的是 Microsoft 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提供每个 distinct 的第一行(按 排序)antsDescriptionCode

它还将为您提供额外的1值列(称为“行”)。要摆脱这种情况,请将第一个替换*为实际的列列表。

于 2012-08-15T05:34:10.793 回答
0

因为您要加入由两个表中的多行共享的任意TypeID数据,所以您需要进一步定义数据。除了它的类型之外,是什么决定了许多 Ant 行中的哪一个与该 Cat 相关联?您是否只想返回给定类型的最高 AntsID?进一步定义关系将创建一个更简单、更强大的解决方案。如果没有这个定义,这个问题的其他答案肯定就足够了。

于 2012-08-15T05:39:00.697 回答