2010-03-07 118 views
1

我是数据库的新手。我用两张桌子遇到了一个奇怪的问题。请让我知道解决方案。请测量值低于加入 - 两张表

一个ProductCentre表 prdcntrId(主键),prdcntrname场景

一个ApplicationType表 apptypeid(主键) prdcntreid(外键ProductCentre) apptypname

ProductCentre table  ||   ApplicationType table 
          || 
prdcntrId prdcntrname ||  apptypeid prdcntreid apptypname 
001   Delhi  ||   11   001   Busines 
002   Mumbai  ||   12   003   Engg 
003   Hyd   ||   13   001   Soft 
             14   002   Science 

最终结果应该是这样的 产品中心可以有任何类型的应用程序,如德里可以有许多业务,软应用程序与孟买相同,hyd

 
--------------------------------------------------------------------- 
prdcntrname    Busines  Engg Soft  Science 
--------------------------------------------------------------------- 
Delhi      1    0  1   0 
--------------------------------------------------------------------- 
Mumbai      0    1  0   1 
--------------------------------------------------------------------- 
Hyd      0    1  0   0 
--------------------------------------------------------------------- 

这个解决方案可能来自这两个表。请帮我在这种情况下

感谢, KK

+0

它被称为表旋转。 – 2010-03-07 18:48:37

回答

3

您可以尝试使用PIVOT

喜欢的东西(SQL Server)的

DECLARE @ProductCentre table(
     prdcntrId INT, 
     prdcntrname VARCHAR(50) 
) 

DECLARE @ApplicationType table(
     apptypeid INT, 
     prdcntreid INT, 
     apptypname VARCHAR(50) 
) 

INSERT INTO @ProductCentre SELECT 001,'Delhi' 
INSERT INTO @ProductCentre SELECT 002,'Mumbai' 
INSERT INTO @ProductCentre SELECT 003,'Hyd' 

INSERT INTO @ApplicationType SELECT 11,001,'Busines' 
INSERT INTO @ApplicationType SELECT 12,003,'Engg' 
INSERT INTO @ApplicationType SELECT 13,001,'Soft' 
INSERT INTO @ApplicationType SELECT 14,002,'Science' 

SELECT p.* 
FROM @ProductCentre p INNER JOIN 
     @ApplicationType a ON p.prdcntrId = a.prdcntreid 
PIVOT 
     (COUNT(apptypname) FOR apptypname IN ([Busines], 
                [Engg], 
                [Soft], 
                [Science])) p 
+0

与PIVOT功能不错。 – 2010-03-07 18:45:10

+0

我同意。我昨天刚刚审查了PIVOT。 – 2010-03-07 18:49:17

2

如果`apptypname”类型固定的,那么这可以工作:

select 
c.prdcntrname, 
Busines = (select count(*) 
      from ApplicationType at 
      where at.prdcntreid = c.prdcntreid and apptypname = 'Business'), 
Engg = (select count(*) 
      from ApplicationType at 
      where at.prdcntreid = c.prdcntreid and apptypname = 'Engg'), 
Soft = (select count(*) 
      from ApplicationType at 
      where at.prdcntreid = c.prdcntreid and apptypname = 'Soft'), 
Science = (select count(*) 
      from ApplicationType at 
      where at.prdcntreid = c.prdcntreid and apptypname = 'Science'), 

from ProductCentre c 
order by c.prdcntrname