SQL Server将两行数据显示为单行

时间:2013-09-23 14:02:08

标签: sql sql-server

我有一个包含IDAddressType列的表格,数据如下

1 ADD1 1
1 Add2 2
2 Add1 1
2 Add2 2

使用查询如何获取数据如下:

ID Addess1 Address2

1 Add1 Add2
2 Add1 Add2

使用第三列Type

  • 如果Type为1,相应的Address应放在Add1列中
  • 如果Type为2,相应的Address应放在Add2列中

请建议如何编写上述要求的查询。

4 个答案:

答案 0 :(得分:1)

一个选项可能是这样的:

SELECT ID, CASE WHEN Type = 1
                THEN Address
                ELSE '' END AS Add1,
           CASE WHEN Type = 2
                THEN Address
                ELSE '' END AS Add2
FROM tbl

另一种选择可能是这样的:

SELECT ID, Address AS Add1, '' AS Add2
FROM tbl
WHERE Type = 1
UNION
SELECT ID, '' AS Add1, Address AS Add2
FROM tbl
WHERE Type = 2

答案 1 :(得分:1)

Select ColumnID, 
CASE Type WHEN 1 THEN Address1 ELSE '' END AS Add1,
CASE Type WHEN 2 THEN Address1 ELSE '' END AS Add2
FROM MyTable

答案 2 :(得分:0)

这取决于。如果您只使用SQL查询服务器并获取数据,那么您将使用类似@neoistheone answer

中提供的SQL代码

如果从用VB.NET编写的程序中访问数据库,例如,您可以使用存储过程并将TYPE作为参数传递。请参阅以下示例代码:

ResetParameters() CreateParameter("Type", ADODB.DataTypeEnum.adVarChar,ADODB.ParameterDirectionEnum.adParamInput, 10, Type) RunSP("spx_Select_Data", "GlobalRS")

然后循环显示如下数据:

If not GlobalRS.EOF then Grid.Rows.Add(CFN(GlobalrS("ID").Value), CFN(GlobalrS("Address").Value)) GlobalRS.MoveNext(); End If

希望这是有道理的

答案 3 :(得分:0)

SELECT COLUMNID, MAX(情况类型为1,因此地址1 ELSE''结束时)为ADD1, MAX(情况类型为2,因此地址1 ELSE''结束时)为ADD2 来自MY_TABLE GROUP BY COLUMNID