Sql server 我做了支点和连接

Sql server 我做了支点和连接,sql-server,stored-procedures,Sql Server,Stored Procedures,Cus表格: +----+-------------------------+------+ | ID | Name | Age | +----+-------------------------+------+ | 1 | Japhet | 22 | | 2 | Abegail | 31 | | 3 | Norlee | 35 | |

Cus表格:

+----+-------------------------+------+
| 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注意。谢谢,兄弟。我在这方面赞扬了你。