2017-01-17 2 views
0

Привет, поэтому я новичок в SQL, и я пытаюсь найти способ, которым я могу получить только строки, которые имеют значения, которые не дублируются друг другу в определенном столбце Таблица.SQL Фильтрация строк без дублирующегося значения

Например, ниже таблица называется T1 и содержит:

ID|Branch ID 
1  444 
2  333 
3  444 
4  111 
5  555 
6  333 

В результате я хочу буду

ID|Branch ID 
4  111 
5  555 

Таким образом, только показывая не являющиеся повторяющиеся строки

Edit: Я хочу примените это к большому реляционному коду. Вот отрывок, где я хочу, чтобы добавить

FROM dbo.LogicalLine 
      INNER JOIN dbo.Page ON dbo.LogicalLine.page_id = dbo.Page.id 
      INNER JOIN dbo.Branch ON dbo.LogicalLine.branch_id = dbo.Branch.id 

В таблице LogicalLine будет иметь столбец с именем branch_id, содержащий повторяющиеся значения идентификаторов. Я хочу отфильтровать их, показывая только не дубликат branch_id, как показано выше, а затем INNER JOIN the Branch table в LogicalLine, который я сделал.

Добавлено -Полная Код здесь:

SELECT 

(SELECT name 
FROM ParentDevice 
WHERE (Dev1.type NOT LIKE '%cable%') AND (id = Dev1.parent_device_id))T1_DeviceID, 

(SELECT name 
FROM Symbol 
WHERE (id = CP1.symbol_id) AND (type NOT LIKE '%cable%'))T1_DeviceName, 

(SELECT name 
FROM Location 
WHERE (id = Page.location_id))T1_Location, 

(SELECT name 
FROM Installation 
WHERE (id = Page.installation_id))T1_Installation, 

(SELECT name 
FROM ParentDevice 
WHERE (Dev2.type NOT LIKE '%cable%') AND (id = Dev2.parent_device_id))T2_DeviceID, 

(SELECT name 
FROM Symbol 
WHERE (id = CP2.symbol_id) AND (type NOT LIKE '%cable%'))T2_DeviceName, 

(SELECT name 
FROM Location 
WHERE (id = PD2.location_id))T2_Location, 

(SELECT name 
FROM Installation 
WHERE (id = Page.installation_id))T2_Installation, 

(SELECT devicefamily 
FROM Device 
WHERE (type LIKE '%cable%') AND (id = SymCable.device_id))CablePartNumber, 

(SELECT name 
FROM ParentDevice 
WHERE (id = DevCable.parent_device_id) AND (DevCable.type LIKE '%cable%'))CableTag 

FROM dbo.LogicalLine 
      INNER JOIN dbo.Page ON dbo.LogicalLine.page_id = dbo.Page.id 
      INNER JOIN dbo.Branch ON dbo.LogicalLine.branch_id = dbo.Branch.id 
      LEFT OUTER JOIN dbo.Symbol AS SymCable ON dbo.LogicalLine.cable_id = SymCable.id 
      LEFT OUTER JOIN dbo.Device AS DevCable ON SymCable.device_id = DevCable.id 
      LEFT OUTER JOIN dbo.ParentDevice AS ParentCable ON DevCable.parent_device_id = ParentCable.id 
      INNER JOIN dbo.SymbolCP AS CP1 ON dbo.Branch.cp1_id = CP1.id 
      INNER JOIN dbo.SymbolCP AS CP2 ON dbo.Branch.cp2_id = CP2.id 
      INNER JOIN dbo.Symbol AS S1 ON CP1.symbol_id = S1.id 
      INNER JOIN dbo.Symbol AS S2 ON CP2.symbol_id = S2.id 
      INNER JOIN dbo.Device AS Dev1 ON S1.device_id = Dev1.id 
      INNER JOIN dbo.Device AS Dev2 ON S2.device_id = Dev2.id 
      INNER JOIN dbo.ParentDevice AS PD1 ON Dev1.parent_device_id = PD1.id 
      INNER JOIN dbo.ParentDevice AS PD2 ON Dev2.parent_device_id = PD2.id 
      INNER JOIN dbo.Location AS L1 ON PD1.location_id = L1.id 
      INNER JOIN dbo.Location AS L2 ON PD2.location_id = L2.id 
      INNER JOIN dbo.Installation AS I1 ON L1.installation_id = I1.id 
      INNER JOIN dbo.Installation AS I2 ON L2.installation_id = I2.id 

WHERE 
     (PD1.project_id = @Projectid) AND (dbo.LogicalLine.drawingmode LIKE '%Single Line%'); 
+0

Какая СУБД вы используете? –

+0

Извините, я не уверен, в настоящее время я использую программное обеспечение bentley promis.e, которое требует от операторов SQL для создания настраиваемого отчета. – Mike

ответ

0
Select Id, BranchId from table t 
Where not exists 
    (Select * from table 
    where id != t.Id 
     and BranchId = t.BranchId) 

или

Select Id, BranchId 
From table 
Group By BranchId 
Having count(*) == 1 

EDIT: изменить в соответствии с просьбой, просто добавить в свой полный запрос SQL в Where положение:

Select l.Id BranchId, [plus whatever else you have in your select clause] 
FROM LogicalLine l 
     join Page p ON p.id = l.page_Id 
     join Branch b ON b.Id = l.branch_id 
Group By l.branch_id, [Plus whatever else you have in Select clause] 
Having count(*) == 1 

или

Select l.Id BranchId, [plus whatever else you have in your select clause] 
FROM LogicalLine l 
     join Page p on p.id = l.page_Id 
     join Branch b on b.Id = l.branch_id 
Where not exists 
    (Select * from LogicalLine 
    where id != l.Id 
     and branch_id = l.branch_id) 
+0

Спасибо за ответ. Если возможно, вы можете показать, как я могу применить это к приведенному выше редактированию? – Mike

+0

Я отредактировал ответ, чтобы догадаться. Если вы показываете весь запрос sql (или, по крайней мере, предложение Select), я могу быть более полезным., –

+0

Я добавил весь код. – Mike

Смежные вопросы