2013-02-04 74 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 
相關問題