我有一个包含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
列中请建议如何编写上述要求的查询。
答案 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