2013-02-04 154 views
1

这已被问了很多次,但我没有找到一个适合我的解决方案。我有一个类似于下面的视图。我需要运行一个返回所有列的查询,但只有一次对于任何唯一的GLASS_ID。我还需要一个where子句WHERE GLASS_ID LIKE '%' + @PartialGlassId + '%'从表格中选择所有列与1不同的列和Where条件

 
VEH_ID GLASS_ID OPENING_SEQ PART_NUM PREFIX_CD ANT_FLAG BLK_SIZE1 
26975  DB00201  1   201  DB  Y  14.00 
26864  DB00375  1   375  DB  N  16.00 
26865  DB00375  1   375  DB  N  16.00 
26866  DB00375  1   375  DB  N  16.00 
38929  DB00408  1   408  DB  N  12.00 
38930  DB00408  1   408  DB  N  12.00 
38931  DB00408  1   408  DB  N  12.00 
38932  DB00408  1   408  DB  N  12.00 
38933  DB00408  1   408  DB  N  12.00 
38990  DB00408  1   408  DB  N  12.00 
38991  DW01015  1   1015  DB  N  12.00 

结果应该

 
VEH_ID NAGS_GLASS_ID OPENING_SEQ PART_NUM PREFIX_CD ANT_FLAG BLK_SIZE1 
26975  DB00201  1   201  DB  Y  14.00 
26864  DB00375  1   375  DB  N  16.00 
38929  DB00408  1   408  DB  N  12.00 
对于那些GLASS_ID LIKE '%DB00%'

+0

其中'rdbms'您使用的?并请看到我们你的工作('sql') – Hiten004

+0

它看起来是重复是Veh_Id的函数......那么你想要返回什么VEH_ID?或者从查询中删除该列,你会没事的。你的选择包括:将它们连接在一起,得到平均值,得到最低值(最小值),得到最大值得到它们。但是你不能做的只是获得所有现有veh_ID的一行,因为玻璃ID存在于多辆车中。 – xQbert

+0

VEH_ID是必需的,因为我使用C#实体,并且我使用的生成器不会返回实体对象,除非生成的查询字段与视图结构完全匹配。结果显示在网格中,用户选择进一步深入显示所有车辆的特定玻璃ID。这里还没有显示其他列包含相同和显示的信息,并显示给用户以帮助他们的选择,但对基本问题并不重要。 – jac

回答

1
SELECT b.* 
FROM yourTable b 
INNER JOIN 
    (SELECT MIN(VEH_ID) as minV, GLASS_ID as g 
    FROM yourTable 
    GROUP BY GLASS_ID) as d 
    ON b.Glass_ID = d.g and b.VEH_ID = d.minV 
WHERE b.GLASS_ID LIKE '%DB00%' 

注意:在这种情况下,WHERE子句可以位于INNER JOIN的子查询中。

0
Select distinct max(veh_ID), glass_ID, Opening_SEQ, part_Num, PRefix_CD, Ant_Flag, BLK_Size1 
FROM yourTable 
WHERE GLASS_ID LIKE '%' + @PartialGlassId + '%' 
Group by glass_ID, Opening_SEQ, part_Num, PRefix_CD, Ant_Flag, BLK_Size1 

其他选项

Select distinct group_Concat(veh_ID, ', '), glass_ID, Opening_SEQ, part_Num, PRefix_CD, Ant_Flag, BLK_Size1 
FROM yourTable 
WHERE GLASS_ID LIKE '%' + @PartialGlassId + '%' 
Group by glass_ID, Opening_SEQ, part_Num, PRefix_CD, Ant_Flag, BLK_Size1 
相关问题