我有两个表一个父表
ID Name
1 Sam
2 Ricky
然后我有一个子表,这里我们有一对多的关系,像记录sam有多个地址
喜欢(儿童表)
ID Parent_ID Address
1 1 Newyork
2 1 Chicago
现在我想做的是编写一个查询,我将从表中获取数据,如
ID Name Address1 Address2
1 Sam Newyork Chicago
我知道现有的最大地址是多少。甚至一些数据也有一个地址。在这种情况下,Address2将为null或为空。
感谢您的帮助!!
答案 0 :(得分:2)
使用INNER JOIN
和PIVOT
你可以获得结果。试试这个..
CREATE TABLE #par
(
ID INT,
Name VARCHAR(100)
)
INSERT #par
VALUES (1,'Sam'),
(2,'Ricky')
CREATE TABLE #chil
(
ID INT,
Parent_ID INT,
Addresss VARCHAR(100)
)
INSERT #chil
VALUES( 1,1,'Newyork'),
(2,1,'Chicago')
SET @col=(SELECT ',[' + Cast(Addresss AS VARCHAR(100)) + ']'
FROM #chil
FOR XML PATH(''))
SELECT @col = RIGHT(@col, Len(@col) - 1)
SET @col1=(SELECT ',[' + Cast(Addresss AS VARCHAR(100))
+ '] as Address'
+ CONVERT(VARCHAR(50), Row_number() OVER (ORDER BY ID))
FROM #chil
FOR XML PATH(''))
SELECT @col1 = RIGHT(@col1, Len(@col1) - 1)
SET @sql= 'SELECT id,name,' + @col1
+ '
FROM (SELECT a.id,
a.name,
b.Addresss Addresss
FROM #par a
INNER JOIN #chil b
ON a.id = b.Parent_ID) p
PIVOT (Max(Addresss)
FOR Addresss IN(' + @col + ')) AS piv '
EXEC Sp_executesql
@sql
输出
id name Address1 Address2
1 Sam Newyork Chicago
答案 1 :(得分:-1)
应该是
select * from parent inner join child on child.parent_id = parent.id
但这很简单。也许我错过了你的问题?
答案 2 :(得分:-1)
mssql中的解决方案是关键字PIVOT。
我很快就会添加一个例子