0

我有两张表,简而言之,我们称它们为 TableA 和 TableB。这是架构:

TableA
ID – int
Name varchar(50)

TableB
ID – int
TableA_Fk – int
Value varchar(50)

表 A 中的每条记录在表 B 中最多可以有 9 条记录。我希望能够以柱状形式检索数据:

TableA-Name, TableB-Value1, … TableB-Value9

这可以使用查询吗?谢谢!

4

3 回答 3

0

您可以执行以下操作:

SELECT rank() OVER (ORDER BY tableA_FK) as rank, tableA_fk, value
INTO #temp
FROM TableB b
ORDER BY rank 


SELECT a.Name, 
       CASE WHEN t.rank = 1 THEN t.Value ELSE NULL END AS TableB-Value1,
       CASE WHEN t.rank = 2 THEN t.Value ELSE NULL END AS TableB-Value2,
       CASE WHEN t.rank = 3 THEN t.Value ELSE NULL END AS TableB-Value3,
       .... (etc.)
FROM TableA a
INNER JOIN #temp t ON a.Id = t.tableA_fk

您需要 Sql Server 2005 或更高版本。抱歉,但我没有 Sql Server(或时间)来测试这个。希望这能给你一个想法和帮助。

于 2010-03-10T02:19:52.477 回答
0

您将需要一个 LEFT JOIN 和一个 PIVOT 表

于 2010-03-10T02:13:32.513 回答
0

除了独立于 DBRM 之外,这应该做到这一点。

SELECT A.Name
    , SUM(CASE WHEN B.Value = 1 THEN 1 ELSE NULL END) AS B_Value_1
    , SUM(CASE WHEN B.Value = 2 THEN 2 ELSE NULL END) AS B_Value_2
    , SUM(CASE WHEN B.Value = 3 THEN 3 ELSE NULL END) AS B_Value_3
    , SUM(CASE WHEN B.Value = 4 THEN 4 ELSE NULL END) AS B_Value_4
    , SUM(CASE WHEN B.Value = 5 THEN 5 ELSE NULL END) AS B_Value_5
    , SUM(CASE WHEN B.Value = 6 THEN 6 ELSE NULL END) AS B_Value_6
    , SUM(CASE WHEN B.Value = 7 THEN 7 ELSE NULL END) AS B_Value_7
    , SUM(CASE WHEN B.Value = 8 THEN 8 ELSE NULL END) AS B_Value_8
    , SUM(CASE WHEN B.Value = 9 THEN 9 ELSE NULL END) AS B_Value_9
FROM A
    INNER JOIN B ON B.TableA_FK = A.ID
GROUP BY A.Name
ORDER BY A.Name
于 2010-03-10T04:32:36.530 回答