将具有多行的sql结果转换为单行

将具有多行的sql结果转换为单行,sql,Sql,您好,我想将具有多行的sql结果转换为单行 例如 询问 Select SampleSiteName , Altitude , Latitude , Longitude From SampleSite] Where SampleSiteID In (Select SampleSiteID From Sample] Where projectid

您好,我想将具有多行的sql结果转换为单行 例如 询问

Select  SampleSiteName
      , Altitude
      , Latitude
      , Longitude
From    SampleSite]
Where   SampleSiteID In (Select SampleSiteID
                         From   Sample]
                         Where  projectid = 2453);
返回以下结果

+-------------------------------+----------+-------------+-------------+
|        SampleSiteName         | Altitude |  Latitude   |  Longitude  |
+-------------------------------+----------+-------------+-------------+
| SAVA - Jamena - 02            |       84 | 44.87833333 | 19.08916667 |
| SAVA - Jamena - 03            |       84 | 44.87833333 | 19.08916667 |
| SAVA - Jamena - 04            |       84 | 44.87833333 | 19.08916667 |
| SAVA - Sremska Mitrovica - 02 |       80 | 44.96527778 | 19.60027778 |
| SAVA - Sremska Mitrovica - 03 |       80 | 44.96527778 | 19.60027778 |
| SAVA - Sremska Mitrovica - 04 |       80 | 44.96527778 | 19.60027778 |
| SAVA - Sabac - 01             |       79 | 44.77138889 | 19.70444444 |
| SAVA - Sabac - 02             |       79 | 44.77138889 | 19.70444444 |
| SAVA - Sabac - 03             |       79 | 44.77138889 | 19.70444444 |
| SAVA - Ostruznica - 02        |       78 | 44.72194444 | 20.30416667 |
| SAVA - Ostruznica - 03        |       78 | 44.72194444 | 20.30416667 |
+-------------------------------+----------+-------------+-------------+
我想要一个查询,它将返回我的高度,纬度和经度的每一个组合的一行。 我想要的结果是

+---------------------------------+----------+-------------+-------------+
|         SampleSiteName          | Altitude |  Latitude   |  Longitude  |
+---------------------------------+----------+-------------+-------------+
| SAVA - Jamena - 02,             |          |             |             |
| SAVA - Jamena - 03,             |          |             |             |
| SAVA - Jamena - 04              |       84 | 44.87833333 | 19.08916667 |
+---------------------------------+----------+-------------+-------------+
| SAVA - Sremska Mitrovica - 02,  |          |             |             |
| SAVA - Sremska Mitrovica - 03,  |          |             |             |
| SAVA - Sremska Mitrovica - 04   |       80 | 44.96527778 | 19.60027778 |
+---------------------------------+----------+-------------+-------------+
| SAVA - Sabac - 01,              |          |             |             |
| SAVA - Sabac - 02,              |          |             |             |
| SAVA - Sabac - 03               |       79 | 44.77138889 | 19.70444444 |
+---------------------------------+----------+-------------+-------------+
| SAVA - Ostruznica - 02          |          |             |             |
| ,SAVA - Ostruznica - 03         |       78 | 44.72194444 | 20.30416667 |
+---------------------------------+----------+-------------+-------------+
我想要一个通用查询,它将为我提供上述结果。
如果我能正确理解您的结构,我们将非常感谢您的帮助

我在SQL SERVER上对此进行了测试,但您没有指出这一假设

SELECT 
       Left(Main.SampleN,Len(Main.SampleN)-1) As "SampleN",
       Main.Altitude,Main.Latitude,Main.Longitude
FROM 
   (
        SELECT DISTINCT ST2.Altitude,ST2.Latitude,ST2.Longitude,
           (
                SELECT ST1.SampleSiteName + ',' AS [text()]
                FROM dbo.SampleSite ST1
                WHERE 
                      ST1.Altitude = ST2.Altitude 
                      AND ST1.Latitude = ST2.Latitude 
                      AND ST1.Longitude = ST2.Longitude
                      AND ST1.SampleSiteID in (SELECT SampleSiteID  
                                          FROM Sample 
                                          WHERE Projectid=2453)
                ORDER BY ST1.Altitude,ST1.Latitude,ST1.Longitude
                FOR XML PATH ('')
            ) AS [SampleN]
      FROM dbo.SampleSite AS ST2
       WHERE ST2.SampleSiteID in (SELECT SampleSiteID  
                                          FROM Sample 
                                          WHERE Projectid=2453)
   ) AS [Main]
对于完整的测试列表,我使用了以下内容:

CREATE TABLE Sample (
  Projectid INT,
  SampleSiteID INT,
);  

CREATE TABLE SampleSite (
 SampleSiteID INT,
 SampleSiteName VARCHAR(35),
 Altitude INT,
 Latitude DECIMAL(18,9),
 Longitude DECIMAL(18,9),
 Projectid INT         
 );
INSERT INTO Sample
VALUES (2453, 1), (2453, 2), (2453, 3), 
      (2453, 4), (2453, 5), (2453, 6), 
      (2453, 7), (2453, 8), (2453, 9), 
      (2453, 10), (2453, 11), (1234, 12);
INSERT INTO SampleSite
VALUES       
(1, 'SAVA - Jamena - 02', 84, 44.87833333 , 19.08916667 ,2453 ),
(2, 'SAVA - Jamena - 03', 84, 44.87833333 , 19.08916667 ,2453 ),
(3, 'SAVA - Jamena - 04', 84, 44.87833333 , 19.08916667 ,2453 ),
(4, 'SAVA - Sremska Mitrovica - 02', 80 ,44.96527778,19.60027778 ,2453 ),
(5, 'SAVA - Sremska Mitrovica - 03', 80 ,44.96527778,19.60027778 ,2453 ),
(6, 'SAVA - Sremska Mitrovica - 04', 80 ,44.96527778,19.60027778 ,2453 ),
(7, 'SAVA - Sabac - 01', 79 , 44.77138889 ,19.70444444 ,2453 ),
(8, 'SAVA - Sabac - 02', 79 , 44.77138889 ,19.70444444 ,2453 ),
(9, 'SAVA - Sabac - 03', 79 , 44.77138889 ,19.70444444 ,2453 ),
(10, 'SAVA - Ostruznica - 02', 78 ,44.72194444 ,20.30416667 ,2453 ),
(11, 'SAVA - Ostruznica - 03', 78 ,44.72194444 ,20.30416667 ,2453 ),
(12, 'SAVA - test - 04', 79 ,44.38822842 ,20.12345678 ,1234 );


SELECT 
       Left(Main.SampleN,Len(Main.SampleN)-1) As "SampleN",
       Main.Altitude,Main.Latitude,Main.Longitude
FROM 
   (
        SELECT DISTINCT ST2.Altitude,ST2.Latitude,ST2.Longitude,
           (
                SELECT ST1.SampleSiteName + ',' AS [text()]
                FROM dbo.SampleSite ST1
                WHERE 
                      ST1.Altitude = ST2.Altitude 
                      AND ST1.Latitude = ST2.Latitude 
                      AND ST1.Longitude = ST2.Longitude
                      AND ST1.SampleSiteID in (SELECT SampleSiteID  
                                          FROM Sample 
                                          WHERE Projectid=2453)
                ORDER BY ST1.Altitude,ST1.Latitude,ST1.Longitude
                FOR XML PATH ('')
            ) AS [SampleN]
      FROM dbo.SampleSite AS ST2
       WHERE ST2.SampleSiteID in (SELECT SampleSiteID  
                                          FROM Sample 
                                          WHERE Projectid=2453)
   ) AS [Main]

这不是一个真正的SQL问题。通常在表示层中完成。