Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Сравнение строк  [new]
RovshanS
Member

Откуда:
Сообщений: 6
Здравствуйте форумчане!

Есть таблица в которой есть данные

№ имя_РС Производитель
1 BAN001 Samsung
2 BAN001 Samsung
3 BAN002 Patriot
4 BAN002 Micron

Задача как сравнить строки: если производитель 1-ой строки = производителю 2-ой строки тогда "ок" если не равно тогда "нет"
цикл сравнения 2 шага т.е. по 2 строки 1-2, 3-4
31 май 16, 13:31    [19240769]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение строк  [new]
AlanDenton
Member [скрыт]

Откуда:
Сообщений: 1004
И что должно быть в итоговой выборке? Что если записей нечетное число?
31 май 16, 13:36    [19240798]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение строк  [new]
RovshanS
Member

Откуда:
Сообщений: 6
В итоге должен быть результат

№ имя_РС Производитель Статус
1 BAN001 Samsung ок
2 BAN001 Samsung ок
3 BAN002 Patriot нет
4 BAN002 Micron нет
31 май 16, 13:39    [19240814]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение строк  [new]
AlanDenton
Member [скрыт]

Откуда:
Сообщений: 1004
DECLARE @t TABLE (
    id INT PRIMARY KEY IDENTITY,
    name VARCHAR(50),
    value VARCHAR(50)
)
INSERT INTO @t (name, value)
VALUES
    ('BAN001', 'Samsung'),
    ('BAN001', 'Samsung'),
    ('BAN002', 'Patriot'),
    ('BAN002', 'Micron')

SELECT *, IIF(
    MIN(value) OVER (PARTITION BY name)
    =
    MAX([value]) OVER (PARTITION BY name), N'ок', N'нет')
FROM @t

Про оптимальность данного решения мы пока помолчу. Да и про нечетное число записей кто-то умолчал.
31 май 16, 13:52    [19240895]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение строк  [new]
AlanDenton
Member [скрыт]

Откуда:
Сообщений: 1004
То чтобы Петром Первым не заклеймили... не "мы"... а я пока промолчу
31 май 16, 13:54    [19240913]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение строк  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
больной мозг родил, ну если версия позволяет
DECLARE @t TABLE (
    id INT PRIMARY KEY IDENTITY,
    name VARCHAR(50),
    value VARCHAR(50)
)
INSERT INTO @t (name, value)
VALUES
    ('BAN001', 'Samsung'),
    ('BAN001', 'Samsung'),
    ('BAN001', 'Samsung'),
    ('BAN002', 'Patriot'),
    ('BAN002', 'Micron'),
    ('BAN002', 'Micron')

;WITH xx
AS
(
SELECT 
	CASE 
		WHEN ROW_NUMBER() OVER (PARTITION BY Value ORDER BY ID) > 1 
		THEN 
			CASE 
				WHEN LAG(value) OVER (PARTITION BY Value ORDER BY ID) = value
				THEN 'ОК'
				ELSE 'НЕ ОК'
			END
		ELSE 
		CASE 
			WHEN LEAD(value) OVER (PARTITION BY name,Value ORDER BY ID) = value
			THEN 'ОК'
			ELSE 'НЕ ОК'
		END 
	END as grpid 
	,*
FROM @t
)

SELECT * FROM xx
31 май 16, 14:15    [19241066]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение строк  [new]
Cygapb-007
Member

Откуда:
Сообщений: 1677
RovshanS
Задача как сравнить строки: если производитель 1-ой строки = производителю 2-ой строки тогда "ок" если не равно тогда "нет"
цикл сравнения 2 шага т.е. по 2 строки 1-2, 3-4
select a.*, iif(a.value=b.value,'Да','Нет')Статус
from @t a
left join @t b on b.id=a.id +(a.id%2)*2-1
31 май 16, 14:23    [19241141]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение строк  [new]
RovshanS
Member

Откуда:
Сообщений: 6
спасибо большое..... Очень помогли..

Благодарю
31 май 16, 14:26    [19241172]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить