我有一个包含列的表ID
和Address
数据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
列中
请建议如何为上述要求编写查询。
我有一个包含列的表ID
和Address
数据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
列中请建议如何为上述要求编写查询。
一种选择可能是这样的:
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
Select ColumnID,
CASE Type WHEN 1 THEN Address1 ELSE '' END AS Add1,
CASE Type WHEN 2 THEN Address1 ELSE '' END AS Add2
FROM MyTable
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
这取决于。如果您只使用 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
希望这是有道理的