SQL Server:如何加入这个?

时间:2012-04-02 08:49:35

标签: sql sql-server tsql

广告表,报纸栏取整数值。

  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 个答案:

答案 0 :(得分:3)

只需将您的“翻译查询”用作子查询:

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 :(得分:1)

在没有外键的情况下加入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

答案 2 :(得分:0)

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