2012-04-02 43 views
0

广告表,报纸栏取整数值。SQL Server:如何加入?

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。如何加入?

+0

为什么'Advert'表中未使用'Newspaper'表的主键类型?看起来像一个破碎的设计。 – Oded 2012-04-02 08:52:02

+0

它是这样设计的。糟糕的设计。 @Oded – ozkank 2012-04-02 08:54:46

+1

这就是我的观点。没有机会修复设计?将一个整数列添加到“报纸”中,以匹配“广告”中的内容并加入该报告中? – Oded 2012-04-02 08:56:11

回答

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

这是一种奇怪的加入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
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