SQL Server: как к этому присоединиться? - PullRequest
0 голосов
/ 02 апреля 2012

Таблица объявлений, столбец Газета принимает целочисленное значение.

  Newspaper
      1
      2
      3

Newspaper таблица нравится

NewspaperName UnitPrice
 A              12.00
 B              11.00
 C              5.00

Запрос;

select 
    case 
       when a.Newspaper = 1 then 'A' 
       when a.Newspaper = 2 then 'B' 
       when a.Newspaper = 3 then 'C'
       when a.Newspaper = 4 then 'D' 
       else 'Empty' 
    end as NewspaperName 
from Advert 
left join...

Это немного глупо. Но я хочу оставить присоединение Advert таблицы к Newspaper. Как к этому присоединиться?

Ответы [ 3 ]

3 голосов
/ 02 апреля 2012

Просто используйте ваш «запрос на перевод» в качестве подзапроса:

SELECT AdvertTranslated.whatever1, Newspaper.whatever2 FROM
    (select case when a.Newspaper = 1 then 'A'
                 when a.Newspaper = 2 then 'B'
                 when a.Newspaper = 3 then 'C' 
                 when a.Newspaper = 4 then 'D'
                 else 'Empty' 
            end as NewspaperName,
            whatever1
       from Advert) AdvertTranslated
    LEFT JOIN Newspaper ON AdvertTranslated.NewspaperName = Newspaper.NewspaperName
1 голос
/ 02 апреля 2012

Странно объединять 2 таблицы без внешнего ключа.В любом случае, если ваши карты A -> 1, B -> 2 и т. Д., Вы можете получить значение ASCII каждой буквы и вычесть на 64, чтобы получить прямое отображение.

Тогда вы получите:

SELECT * -- whatever you want to select
FROM Advert
LEFT JOIN Newspaper ON Advert.Newspaper = ASCII(Newspaper.NewspaperName) - 64
0 голосов
/ 02 апреля 2012
declare @Advert table(newspaper int)
insert @Advert values(1), (2), (3), (4)

declare @Newspaper table(NewspaperName char(1), unitprice money)
insert @Newspaper values('A', 12.00), ('B', 11.00), ('C', 5.00)

SELECT a.newspaper, coalesce(b.Newspapername, 'Empty') NewspaperName, b.unitprice 
FROM @Advert a
LEFT JOIN
@Newspaper b
ON char(a.newspaper + 64) = b.NewspaperName
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...