Sql server 我做了支点和连接
Cus表格:Sql server 我做了支点和连接,sql-server,stored-procedures,Sql Server,Stored Procedures,Cus表格: +----+-------------------------+------+ | ID | Name | Age | +----+-------------------------+------+ | 1 | Japhet | 22 | | 2 | Abegail | 31 | | 3 | Norlee | 35 | |
+----+-------------------------+------+
| ID | Name | Age |
+----+-------------------------+------+
| 1 | Japhet | 22 |
| 2 | Abegail | 31 |
| 3 | Norlee | 35 |
| 4 | Pacita | 60 |
| 5 | Reynaldo | 65 |
| 6 | Barro, Reynaldo Batucan | 65 |
| 7 | Batucan, Japhet C. | NULL |
| 8 | Barro, Reynaldo B. | NULL |
+----+-------------------------+------+
Cus2表:Cus和Cus2具有一对多关系
+-----+------+-----------------+---------------+
| QID | ID | Name | Country |
+-----+------+-----------------+---------------+
| 1 | 1 | Japhet | |
| | PH | | |
| 2 | 1 | NULL | CN |
| 3 | 1 | Japhet | PH |
| 4 | 1 | Japhet | PH |
| 5 | 2 | NULL | PH |
| 6 | 2 | NULL | CN |
| 7 | 2 | John Hammond | United States |
| 8 | 3 | Mudassar Khan | India |
| 9 | 3 | Suzanne Mathews | France |
| 11 | 4 | Japhe | PH |
| 12 | 4 | Abegail | |
| | PH | | |
| 13 | 4 | Abegail | |
| | US | | |
| 14 | 3 | LOL | |
| | UK | | |
| 15 | 4 | Japhet | |
| | PH | | |
| 16 | 3 | Abegail | |
| | | | |
| 17 | 2 | Japhet | |
| | FR | | |
| 18 | 1 | Japhet | PH |
| 19 | 4 | Japhet | PH |
| 20 | 3 | | NULL |
| 21 | 2 | Abegail | CN |
| 22 | 1 | Japhet | PH |
| 23 | 5 | Japhet | USA |
| 24 | 5 | Abegail | CN |
| 25 | 5 | Japhet | PH |
| 26 | NULL | NULL | NULL |
| 27 | NULL | NULL | NULL |
| 28 | NULL | NULL | NULL |
| 29 | 8 | Japhet | PH |
| 30 | 7 | Abegail | CN |
| 31 | 8 | Japhet | PH |
| 32 | 7 | Abegail | USA |
| 33 | 7 | Abegail | PH |
| 34 | 8 | Abegail | CN |
+-----+------+-----------------+---------------+
我创建了一个轴和一个连接
CREATE PROCEDURE [dbo].[Procedure5]
as
SELECT *
FROM Cus S
INNER JOIN (
SELECT *
FROM
(SELECT * FROM Cus2) I
PIVOT (Max(I.Name) FOR I.Country IN (PH, CN, USA)) P
) I ON S.id = I.id
;
RETURN 0
但是它的输出有3个相似的名称,我如何才能做到它只显示相同行中的所有数据
我期望的结果是:
+----------+-----+--------+---------+--------+
| Name | Age | PH | CN | USA |
+----------+-----+--------+---------+--------+
| Reynaldo | 65 | Japhet | Abegail | Japhet |
+----------+-----+--------+---------+--------+
我的当前输出:
+----------+-----+--------+---------+--------+
| Name | Age | PH | CN | USA |
+----------+-----+--------+---------+--------+
| Reynaldo | 65 | | | Japhet |
| Reynaldo | 65 | | Abegail | |
| Reynaldo | 65 | Japhet | | |
+----------+-----+--------+---------+--------+
您的Pivot查询可能如下所示
SELECT *
FROM (SELECT c.Name,
c.Age,
c2.Name [Name2],
c2.Country
FROM Cus c
INNER JOIN Cus2 c2 ON c.Id = c2.Id) t
PIVOT (
MAX(Name2)
FOR Country IN ([PH], [CN], [USA])
) p
编写透视查询时,请确保创建一个派生表,并且只选择希望在最终结果中看到的字段,并且所有列都具有不同的名称
PIVOT的另一种选择是MAXCase表达式。这可能比PIVOT性能更好
SELECT c.Name,
c.Age,
MAX(CASE WHEN c2.Country = 'PH' THEN c2.Name END) AS [PH],
MAX(CASE WHEN c2.Country = 'CN' THEN c2.Name END) AS [CN],
MAX(CASE WHEN c2.Country = 'USA' THEN c2.Name END) AS [USA]
FROM Cus c
INNER JOIN Cus2 c2 ON c.Id = c2.Id
GROUP BY c.Name,
c.Age
您能否在文章中以文本形式添加两个表中的一些数据样本,以及预期的结果?为什么要将数据透视的结果合并回表Cus?这里是一个很好的起点。Cus和Cus2表中的样本数据如何?首先进行连接,最后进行数据透视。在添加数据透视图之前,请先查看联接的未插入结果。不客气。。您非常接近,但在pivot查询中使用Select*时,通常会获得太多信息。。从Cus2中选择Id、名称、国家/地区,在您的内部连接中将使您接近您想要的wanted@JaimeD77注意。谢谢,兄弟。我在这方面赞扬了你。