2016-09-21 2 views
0

Я мог бы использовать некоторых людей доброй воли!Выделите все разные записи из одного столбца, которые имеют одинаковое значение в другом кубе

У меня есть три столбца в таблице под названием X:

ID | Barcode| Description 
1 | 554412 | Bar 
2 | 554412 | Stone 
3 | 554412 | Bar 

Что мне нужно, чтобы выбрать все штрихкоды вместе с идентификаторами, где тот же штрих-кода имеет различные описания, так что в этом случае было бы показать мне Идентификаторы 1 и 2 с описанием бара и камня.

спасибо, что заблаговременно!

+2

Почему идентификаторами 1 и 2, а не 2 и 3? – HoneyBadger

+0

@SankarRaj Вы не можете получить идентификаторы, если вы используете 'Group by' –

+0

@JibinBalachandran Да, вы можете. Вам просто нужно думать за пределами соединения. – JohnHC

ответ

0

Это показывает, штрих-коды, которые имеют более чем одно неоспоримое описание и связанное с идентификаторами

select x.id, b.Barcode, b.Duplicates 
from 
(
select Barcode, count(distinct Description) as Duplicates 
from x 
group by Barcode 
having count(distinct Description) >1 
) b 
inner join x 
on x.Barcode = b.Barcode 
+0

Привет, этот выглядит довольно круто, но вместо этого (или вместе с) графа мне также нужно увидеть разные описания. – Klimun

+2

Кажется, вы должны приложить усилия, чтобы изменить свой код для работы и опубликовать обновленный код, вместо того чтобы жаловаться, что JohnHC не сделал для вас достаточной работы. – Missy

0
Select x1.ID , x1.Barcode from x as x1 , x as x2 where 
x1.Barcode = x2.Barcode and x2.Description != x1.Description 

Это возвращает строки 1,2 и 3 в вашем примере, потому что все они отвечают критериям «Same штрих-код имеет другое описание ».

Ряды 1 и 3 будут возвращены, поскольку они оба имеют один и тот же штрих-код и другое описание, чем строки 2.

+0

Хорошо, это звучит хорошо, но я объяснил это плохо, я думаю. Мне в основном нужны все штрих-коды, содержащие более одного описания, но в результате мне нужно увидеть все три столбца, чтобы увидеть, что такое «отношения» между идентификаторами, если этот набор идентификаторов имеет унифицированные описания или нет ... или вы знаете, что это значит? – Klimun

0

Пожалуйста, проверьте ответ ниже.

CREATE TABLE test (
id int DEFAULT NULL, 
Barcode nvarchar(20) DEFAULT NULL, 
Description nvarchar(40) DEFAULT NULL 
) --ENGINE=InnoDB DEFAULT CHARSET=latin1; 

-- ---------------------------- 
-- Records of test 
-- ---------------------------- 
INSERT INTO test VALUES ('1', '554412', 'Bar'); 
INSERT INTO test VALUES ('2', '554412', 'Stone'); 
INSERT INTO test VALUES ('3', '554412', 'Bar'); 


-- If you want to show all ids then use the STUFF() code, so it will return 1,3 for Bar and 2 for Description 
SELECT Barcode, Description, 
(
SELECT STUFF((
SELECT ', ' + convert(varchar(10),b.id) 
FROM test b 
WHERE b.barcode = t.Barcode AND b.Description= t.Description 
FOR XML PATH('') 
) , 1, 2, '')) AS Id 
FROM dbo.test t 
group by Barcode, Description 


-- If you just want to display 1 for Bar and 2 for Description then use below code 
SELECT Barcode, Description, 
(
SELECT TOP 1 b.id 
FROM test b 
WHERE b.barcode = t.Barcode AND b.Description= t.Description 
) AS Id 
FROM dbo.test t 
group by Barcode, Description 
0

Ответ на этот вопрос может быть хитрыми кузни, когда вы говорите вам нужно, чтобы выбрать все штрихкоды вместе с идентификаторами, где же штрих-кода имеет различные описания, тогда ResultSet может быть идентификатором 2 и 3. Таким образом, я взял минимум id для представления первого совпадения. Смотрите ниже:

with tabl (ID , Barcode, Description) 
      as (select 1 , 554412 ,'Bar' from dual 
       UNION ALL 
       select 2 ,554412 ,'Stone' from dual 
       UNION ALL 
       select 3 ,554412 ,'Bar' from dual) 
select min(a.id) id,a.barcode,a.description 
from tabl a 
inner join tabl b 
on a.Barcode = b.Barcode 
group by a.barcode,a.description; 
0

Можете ли вы попробовать это, надеюсь, что он будет решать ваши требования:

CREATE TABLE tmpTwo(ID INT, Barcode INT, DescriptionE VARCHAR(50)) 
INSERT INTO tmpTwo VALUES 
(1,554412, 'Bar'), 
(2,554412, 'Stone'), 
(3,554412, 'Bar'), 
(4,554413, 'b'), 
(5,554413, 's'), 
(6,554413, 'b'), 
(7,554414, 'z') 

SELECT s.id, s.DescriptionE 
FROM tmpTwo s 
INNER JOIN(SELECT MAX(u.id) it FROM tmpTwo u 
     WHERE u.barcode IN (SELECT v.barcode FROM tmpTwo v 
         GROUP BY v.barcode 
         HAVING (COUNT(DISTINCT(v.descriptionE)))>1) 
GROUP BY u.descriptionE) t ON s.id = t.it 

Выход:

id DescriptionE 
2 Stone 
3 Bar 
5 s 
6 b 

FYI, если вы измените MAX до MIN, то вы будете получить ответ с id 1,2,4,5

1

Поскольку это помечено как SQL, так и VFP, я отвечу на размышления в этом контексте.Вот немного расширенной выборки данных из вашей таблицы:

Create Cursor myTable (Id I, Barcode c(10), Description c(10)) 

Insert Into myTable (Id, Barcode, Description) Values (1,'554412', 'Bar') 
Insert Into myTable (Id, Barcode, Description) Values (2,'554412', 'Stone') 
Insert Into myTable (Id, Barcode, Description) Values (3,'554412', 'Bar') 

Insert Into myTable (Id, Barcode, Description) Values (4,'554413', 'Bar1') 
Insert Into myTable (Id, Barcode, Description) Values (5,'554413', 'Bar2') 
Insert Into myTable (Id, Barcode, Description) Values (6,'554413', 'Bar3') 
Insert Into myTable (Id, Barcode, Description) Values (7,'554413', 'Bar3') 
Insert Into myTable (Id, Barcode, Description) Values (8,'554413', 'Bar1') 

С SQL это очень легко, чтобы получить то, что вы показали, как это:

Select * From myTable ; 
    where Id In ; 
    (Select Min(Id) From myTable Group By Barcode, Description) 

Просто ради VFP, еще один простой трюк, который больше ничего не требуется, чтобы создать уникальный индекс:

Index on Barcode + Description tag tmp unique 
* Browse 
0

вам нужно сделать самостоятельно присоединиться к

http://www.mysqltutorial.org/mysql-self-join/

первой таблица будет Select * из таблицы

второго стола будет разнице в MySQL

я придумал .... нет удобного MSSQL, чтобы попробовать его

Таблицы t1 Количество записей: 3

col1 col2 col3 
1 554412 Bar 
2 554412 Stone 
3 554412 Bar 

SELECT 
distinct 
pv1.col2, pv1.col3 

from [t1] pv1 
join [t1] pv2 on pv1.col1=pv2.col1 

Результат:

Number of Records: 2 
    col2 col3 
    554412 Bar 
    554412 Stone 

извед, нет col1, извините, был в течение 18 часов .... попробуйте право присоединиться

https://technet.microsoft.com/en-us/library/ms177490(v=sql.105).aspx