0

我有一个包含列的表IDAddress数据Type如下

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

4 回答 4

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
于 2013-09-23T14:07:14.077 回答
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
于 2013-09-23T14:08:33.003 回答
0

SELECT COLUMNID, MAX(CASE TYPE WHEN 1 THEN ADDRESS1 ELSE '' END) AS ADD1, MAX(CASE TYPE WHEN 2 THEN ADDRESS1 ELSE '' END) AS ADD2 从 MY_TABLE GROUP BY COLUMNID

于 2013-09-23T17:53:47.893 回答
0

这取决于。如果您只使用 SQL 来查询服务器并获取数据,那么您将使用类似于@neoistheone 答案中提供的 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

希望这是有道理的

于 2013-09-23T14:13:18.230 回答