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

Откуда:
Сообщений: 45
Приветствую всех!

Есть список узлов в базе MSSQL.
Записи в базе это список узлов с именами портов. Запрос:
SELECT TOP 48
      [Node]
     ,[Vendor]
     ,[IfName]  as DPort
     ,[Description]
FROM [Interfaces]
where [Node] like '%TROITSKTRAKT.11%'


Выдает примерно такую таблицу:
Node			Vendor	UpPort	Description
TROITSKTRAKT.11.SW1	Cisco	Fa0/1	N_TROITSKTRAKT.3A.SA1
TROITSKTRAKT.11.SW1	Cisco	Fa0/19	N_TROITSKTRAKT.4.SA1
TROITSKTRAKT.11.SW1	Cisco	Gi0/1	N_KURCHATOVA.1.SD3


Еще до выполнения запроса я знаю что линк c именем KURCHATOVA.1.SD3 это аплинк, по этому хочу добавить еще один столбец, куда добавить только Gi0/1. что бы резултат имел вид:
Node			Vendor	DPort	Description		UPort
TROITSKTRAKT.11.SW1	Cisco	Fa0/1	N_TROITSKTRAKT.3A.SA1	Gi0/1
TROITSKTRAKT.11.SW1	Cisco	Fa0/19	N_TROITSKTRAKT.4.SA1	Gi0/1
TROITSKTRAKT.11.SW1	Cisco	Gi0/1	N_KURCHATOVA.1.SD3	Gi0/1


Но как это реализовать понятия не имею :(
Помогите, пожалуйста?
3 дек 13, 13:58    [15231794]     Ответить | Цитировать Сообщить модератору
 Re: Все значения одного столбца задать равны вычисляемому значению.  [new]
Glory
Member

Откуда:
Сообщений: 104760
SELECT TOP 48
      [Node]
     ,[Vendor]
     ,[IfName]  as DPort
     ,[Description]
 , 'Gi0/1' as UPort
FROM [Interfaces]
where [Node] like '%TROITSKTRAKT.11%'
3 дек 13, 14:00    [15231825]     Ответить | Цитировать Сообщить модератору
 Re: Все значения одного столбца задать равны вычисляемому значению.  [new]
DeeZ
Member

Откуда:
Сообщений: 45
Извиняюсь, опечатка. простопереименовать я знаю как. вот корректно:
SELECT TOP 48
      [Node]
     ,[Vendor]
     ,[IfName]  as DPort
     ,[Description]
FROM [Interfaces]
where [Node] like '%TROITSKTRAKT.11%'


Выдает примерно такую таблицу:
Node			Vendor	DPort	Description
TROITSKTRAKT.11.SW1	Cisco	Fa0/1	N_TROITSKTRAKT.3A.SA1
TROITSKTRAKT.11.SW1	Cisco	Fa0/19	N_TROITSKTRAKT.4.SA1
TROITSKTRAKT.11.SW1	Cisco	Gi0/1	N_KURCHATOVA.1.SD3


Еще до выполнения запроса я знаю что линк c именем KURCHATOVA.1.SD3 это аплинк, по этому хочу добавить еще один столбец, куда добавить только Gi0/1. что бы резултат имел вид:
Node			Vendor	DPort	Description		UPort
TROITSKTRAKT.11.SW1	Cisco	Fa0/1	N_TROITSKTRAKT.3A.SA1	Gi0/1
TROITSKTRAKT.11.SW1	Cisco	Fa0/19	N_TROITSKTRAKT.4.SA1	Gi0/1
TROITSKTRAKT.11.SW1	Cisco	Gi0/1	N_KURCHATOVA.1.SD3	Gi0/1


Но как это реализовать понятия не имею :(
Помогите, пожалуйста?
3 дек 13, 14:09    [15231923]     Ответить | Цитировать Сообщить модератору
 Re: Все значения одного столбца задать равны вычисляемому значению.  [new]
DeeZ
Member

Откуда:
Сообщений: 45
Glory, 'Gi0/1' не подходит, т.к. порт на всех коммутаторах разный, по этому его надо вычислить сначала. что то типа

if [Description] =  KURCHATOVA.1.SD3  then @A = DPort

SELECT TOP 48
      [Node]
     ,[Vendor]
     ,[IfName]  as DPort
     ,[Description]
 , @A as UPort
FROM [Interfaces]
where [Node] like '%TROITSKTRAKT.11%'
3 дек 13, 14:17    [15232009]     Ответить | Цитировать Сообщить модератору
 Re: Все значения одного столбца задать равны вычисляемому значению.  [new]
Glory
Member

Откуда:
Сообщений: 104760
DeeZ
Glory, 'Gi0/1' не подходит, т.к. порт на всех коммутаторах разный,

DeeZ
Еще до выполнения запроса я знаю что линк c именем KURCHATOVA.1.SD3 это аплинк

И чему верить ?
И почему не подходит, если результат соответствует вашим _показанным_ требованиям ?
3 дек 13, 14:19    [15232038]     Ответить | Цитировать Сообщить модератору
 Re: Все значения одного столбца задать равны вычисляемому значению.  [new]
DeeZ
Member

Откуда:
Сообщений: 45
Glory, я знаю его дескрипотр. но не знаю какой имено это порт.
3 дек 13, 14:20    [15232048]     Ответить | Цитировать Сообщить модератору
 Re: Все значения одного столбца задать равны вычисляемому значению.  [new]
Glory
Member

Откуда:
Сообщений: 104760
DeeZ
Glory, я знаю его дескрипотр. но не знаю какой имено это порт.

Еще раз - чем предложенный вариант запроса отличается от _показанного вами_ результата ?
3 дек 13, 14:21    [15232066]     Ответить | Цитировать Сообщить модератору
 Re: Все значения одного столбца задать равны вычисляемому значению.  [new]
DeeZ
Member

Откуда:
Сообщений: 45
Glory, тем что если я перейду на TROITSKTRAKT.3A.SA1 и захочу посомтреть какой у коммутатора порт сомтрит на TROITSKTRAKT.11.SW1 то я получу не корректный результат.


у меня 2 переменные. имя коммутатора и имя его аплинка.
Мне надо получить список портов, но отдельным столбиком найти и вывести имя порта, смотрящего "наверх"
3 дек 13, 14:24    [15232092]     Ответить | Цитировать Сообщить модератору
 Re: Все значения одного столбца задать равны вычисляемому значению.  [new]
Glory
Member

Откуда:
Сообщений: 104760
DeeZ
Glory, тем что если я перейду на TROITSKTRAKT.3A.SA1 и захочу посомтреть какой у коммутатора порт сомтрит на TROITSKTRAKT.11.SW1 то я получу не корректный результат.

И где это отражено в вашей постановке то ?
В вашем примере у всех записей одно значение UPort
3 дек 13, 14:26    [15232118]     Ответить | Цитировать Сообщить модератору
 Re: Все значения одного столбца задать равны вычисляемому значению.  [new]
DeeZ
Member

Откуда:
Сообщений: 45
Glory, согласен, странного хочу, и затрудняюсь описать что имено надо. Сейчас понятно? можете помоч?
3 дек 13, 14:27    [15232129]     Ответить | Цитировать Сообщить модератору
 Re: Все значения одного столбца задать равны вычисляемому значению.  [new]
Glory
Member

Откуда:
Сообщений: 104760
DeeZ
Сейчас понятно? можете помоч?

https://www.sql.ru/forum/127456/rekomendacii-po-oformleniu-soobshheniy-v-forume п.4 и п.6
3 дек 13, 14:29    [15232148]     Ответить | Цитировать Сообщить модератору
 Re: Все значения одного столбца задать равны вычисляемому значению.  [new]
DeeZ
Member

Откуда:
Сообщений: 45
Glory,
Microsoft SQL Server 2008 R2 (RTM) - 10.50.1600.1 (X64) Apr 2 2010 15:48:46 Copyright (c) Microsoft Corporation Enterprise Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1) (Hypervisor)

скриптов создания и заполнения таблиц предоставить не могу, т.к. оно создается не мной. я просто работаю с уже готовыми данными. Таблица 1 в первом сообщении примерные данные.
3 дек 13, 14:36    [15232226]     Ответить | Цитировать Сообщить модератору
 Re: Все значения одного столбца задать равны вычисляемому значению.  [new]
KRS544
Member

Откуда:
Сообщений: 497
Получите список портов по имени:
SELECT [Node],[IfName]  as DPort
FROM [Interfaces]
where [Node] like '%TROITSKTRAKT.11%'
and [Description]='N_KURCHATOVA.1.SD3'

потом join c главной таблицей по NODE.
Если я правильно понял условие...
3 дек 13, 14:37    [15232238]     Ответить | Цитировать Сообщить модератору
 Re: Все значения одного столбца задать равны вычисляемому значению.  [new]
StarikNavy
Member

Откуда: Москва
Сообщений: 2396
DeeZ,

(*мат поскипан*) .ля!
добавьте в свой пример, и в выходной результат разные значения UPort, раз уж такие сложности с описание
"KURCHATOVA.1.SD3 это аплинк"
что такое аплинк?
3 дек 13, 14:40    [15232275]     Ответить | Цитировать Сообщить модератору
 Re: Все значения одного столбца задать равны вычисляемому значению.  [new]
DeeZ
Member

Откуда:
Сообщений: 45
KRS544, да что то похожее, я могу узнать отдельным запросом номер порта. но как тепрь сделать JOIN?

Этот запрос вернет нам нужный нам порт:
SELECT TOP 48 
     ,[IfName]  as UPort
FROM [Interfaces]
where [Node] like '%TROITSKTRAKT.11%' and 
      [Description] like '%KURCHATOVA.1.SD3%' 


результат нужно присвоить @UPort, и вот уже ее добавить отдельным столбцом:
SELECT TOP 48
      [Node]
     ,[Vendor]
     ,[IfName]  as DPort
     ,[Description]
     @UPort as UPort
FROM [Interfaces]
where [Node] like '%TROITSKTRAKT.11%'
3 дек 13, 14:53    [15232395]     Ответить | Цитировать Сообщить модератору
 Re: Все значения одного столбца задать равны вычисляемому значению.  [new]
DeeZ
Member

Откуда:
Сообщений: 45
Я переменные пишу от балды, вероятность 99% что просто @UPort В селект нельзя добавить.
И их нужно инициализировтаь пердварительно?
3 дек 13, 14:54    [15232413]     Ответить | Цитировать Сообщить модератору
 Re: Все значения одного столбца задать равны вычисляемому значению.  [new]
KRS544
Member

Откуда:
Сообщений: 497
Ну вы блин даете...
SELECT x1.[Node]
     ,x1.[Vendor]
     ,x1.[IfName]  as DPort
     ,x1.[Description]
     ,x2.IfName as UPPort
FROM [Interfaces] x1 left join
 (SELECT [Node],[IfName] 
  FROM [Interfaces]
  where [Node] like '%TROITSKTRAKT.11%'
    and [Description]='N_KURCHATOVA.1.SD3') x2 on x1.node=x2.node
where x1.[Node] like '%TROITSKTRAKT.11%'

как то так, но работать будет, если действительно ОДИН аплинк на один коммутатор (node).
3 дек 13, 15:03    [15232490]     Ответить | Цитировать Сообщить модератору
 Re: Все значения одного столбца задать равны вычисляемому значению.  [new]
DeeZ
Member

Откуда:
Сообщений: 45
KRS544, Да, супер! Идею понял. Получилось.
3 дек 13, 15:08    [15232553]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить