加入 - 两张表
问题描述:
我是数据库的新手。我用两张桌子遇到了一个奇怪的问题。请让我知道解决方案。请测量值低于加入 - 两张表
一个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
答
您可以尝试使用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
答
如果`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
它被称为表旋转。 – 2010-03-07 18:48:37