Форум программистов, компьютерный форум, киберфорум
Microsoft SQL Server
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.77/43: Рейтинг темы: голосов - 43, средняя оценка - 4.77
2 / 2 / 0
Регистрация: 21.04.2011
Сообщений: 60

Как сравнить несколько значений в строке?

27.06.2013, 20:31. Показов 9256. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравия всем!

Появился вопрос, который я не знаю как правильно згуглить или как правильно спросить чтобы получить ответ. Мне кажется что все прсото но я тупо не могу понять как разобрать вот уже 3й день, решил спросить здесь...

Вот есть строка:
SQL
1
SELECT * FROM tbl
tbl:
Имя столбца |G1|G2|G3|G4|G5|G6|
Значение __ |34| 0 |11| 0 | 0 | 9 |

Мне нужно сравнить на повторные значения G1, G2, G3, G4, G5, G6 между собой, но при условии чтобы 0 не участвовал в сравнении.

Пишу так:
SQL
1
2
3
4
5
6
7
8
9
IF EXISTS (SELECT * FROM tbl WHERE
G1<>G2 AND G1<>G3 AND G1<>G4 AND G1<>G5 AND G1<>G6 AND
G2<>G3 AND G2<>G4 AND G2<>G5 AND G2<>G6 AND 
G3<>G4 AND G3<>G5 AND G3<>G6 AND 
G4<>G5 AND G4<>G6 AND 
G5<>G6)
BEGIN
Print "Найдена строка!"
END
Но проблема в том что G4 и G5 тоже сравниваются но там записаны 0 и поэтому запрос ничего не возвращает. или например G2 и G6 - тоже имеют значение 0 и поэтмоу запрос тоже ничего не возвращает. Мне надо как-то сделать сравнение кроме нулей. Мне нужно чтобы сравнивались только числа больше нуля, например 34 и 34 и если найдется дубликат в столбцах то выведет сообщение.

Подскажите пожалуйста. Чуствую что здесь не сложно но башка уже вобще ничего не варит за 3 дня.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
27.06.2013, 20:31
Ответы с готовыми решениями:

Как сравнить несколько значений ?
Как можно сравнить несколько значений так чтобы определить какое значение среди приведённых наибольшее , а какое наименьшее ? Пример : ...

Как с помощью IndexOf выделить все слова в первой строке и сравнить их со словами во второй строке?
как с помощью IndexOf выделить все слова в первой строке и сравнить их со словами во второй строке, а если они будут одинаковыми заменить...

Сравнить последние несколько элементов. Как?
у меня счетчик нескольких событий. Скажем ++А1 и ++А2. Они могут поступать в разной последовательности и долго. Как мне сравнить...

5
1313 / 945 / 144
Регистрация: 17.01.2013
Сообщений: 2,348
27.06.2013, 21:32
Или сложно,
T-SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
;with CTE as (select * from (values
   (1,0,2,0,0,1),
   (2,3,4,5,0,5),
   (3,4,0,0,0,5),
   (34,0,11,0,0,9)
    )temp_CTE(G1,G2,G3,G4,G5,G6))
select * 
from CTE c
where not exists(
   select 1
   from (
      select G1 union all 
      select G2 union all 
      select G3 union all 
      select G4 union all 
      select G5 union all 
      select G6 
      )u(G)
   where u.G!=0
   group by u.G
   having COUNT(*)>1
   )
или по-простому
T-SQL
1
2
3
4
5
6
7
8
9
10
11
12
;with CTE as (select * from (values
   (1,0,2,0,0,1),
   (2,3,4,5,0,5),
   (3,4,0,0,0,5),
   (34,0,11,0,0,9)
    )temp_CTE(G1,G2,G3,G4,G5,G6))
select * from CTE
where  (G1=0 or G1 not in (G2,G3,G4,G5,G6))
   and (G2=0 or G2 not in (G3,G4,G5,G6))
   and (G3=0 or G3 not in (G4,G5,G6))
   and (G4=0 or G4 not in (G5,G6))
   and (G5=0 or G5 not in (G6))
1
1116 / 761 / 183
Регистрация: 27.11.2009
Сообщений: 2,272
27.06.2013, 21:36
Попробуйте (не проверял)
T-SQL
1
2
3
SELECT *
FROM tbl
WHERE EXISTS(SELECT * FROM(VALUES(G1),(G2),(G3),(G4),(G5),(G6))T(G) WHERE G<>0 GROUP BY G HAVING COUNT(*)>1);
А Вы что-нибудь об операторе OR слышали?
1
2 / 2 / 0
Регистрация: 21.04.2011
Сообщений: 60
27.06.2013, 21:44  [ТС]
cygapb-007, а можете объяснить это:
SQL
1
2
3
4
5
6
WITH CTE AS (SELECT * FROM (VALUES
   (1,0,2,0,0,1),
   (2,3,4,5,0,5),
   (3,4,0,0,0,5),
   (34,0,11,0,0,9)
    )temp_CTE(G1,G2,G3,G4,G5,G6))
Я так понял что создаем временную таблицу чтоли, но непонятны значения в скобках, кроме последнего - моего. Дело в том что G1 может рпинимать любые значения от 0 до 255, мне нужно сравнить их между собой не используя при сравнении 0. SELECT выборка это уже я дальше понял. Мнепросто хочется не тупо скопировать а разобраться, буду благодарен

iap, спасибо добрый человек отлично сработало, просто магия какая-то, я даже не понимаю как это работает.
Про or конечно слышал, пытался его применить в своем примере по-разному - не помогало ничего.

Толи дело делать выборки с условиями из столбцов - тут никаких вопросов нет, а вот такой вот пример я нигде даже нагуглить не смог...
Как я проверил ваш способ я просто попытался повбивать в таблицу повторные значения выше 0 если повторы были - строка выводилась, если нет - не выводилась. Соответственно нули игнорируются. Визуально именно так мне и нужно, но поскольку непонимаю принцип действия то разберусь, правильно ли все будет происходить .
0
1313 / 945 / 144
Регистрация: 17.01.2013
Сообщений: 2,348
27.06.2013, 23:11
Цитата Сообщение от cosong Посмотреть сообщение
cygapb-007, а можете объяснить это
Могу. Но лучше почитать про Обобщенные табличные выражения

Добавлено через 12 минут
В вашем стартовом запросе сообщение «Строка найдена» печатается, если все значения различны. Однако позднее вы говорили, что правильно, если сообщается о наличии дубликатов. Как правильно? ))
1
2 / 2 / 0
Регистрация: 21.04.2011
Сообщений: 60
27.06.2013, 23:11  [ТС]
Спасибо, почитаю.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
27.06.2013, 23:11
Помогаю со студенческими работами здесь

Как сравнить несколько(>2) элементов в одном массиве?
Добрый день! Помогите, пожалуйста! Никак не могу разобраться, как сравнивать элементы одного и того же массива между собой! Полная...

Как сравнить несколько переменных с одним и тем же числом?
Доброго дня. Есть несколько переменных a = int(input()) b = int(input()) c = int(input()) d = int(input()) e = int(input()) ...

Как сравнить слова в строке
Как сравнить слова в строке? (СИ)

Как сравнить значение переменной с набором значений?
Как сравнить значение переменной с набором значений при условии, что они не лежат в одном диапазоне? К примеру, мне необходимо...

Как символ в строке сравнить с пробелом?
#include &quot;cs50.h&quot; #include &lt;stdio.h&gt; #include &lt;string.h&gt; #include &lt;ctype.h&gt; #define IN 1 #define OUT 0 int main(void) { ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru