2013-09-23 29 views
0

我有AddressIDType和數據的表如下SQL服務器顯示兩個數據,以單行

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應放置在​​柱
  • 如果Type爲2的對應的Address應放置在Add2

請建議如何編寫查詢上述要求。

回答

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
Select ColumnID, 
CASE Type WHEN 1 THEN Address1 ELSE '' END AS Add1, 
CASE Type WHEN 2 THEN Address1 ELSE '' END AS Add2 
FROM MyTable 
+0

編輯快:)謝謝壽 – Xelom

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

希望這是有意義

0

SELECT ColumnID的, MAX(CASE類型時1 THEN ADDRESS1 ELSE''END)AS ADD1, MAX(CASE TYPE when 2 then ADDRESS1 ELSE''END)AS ADD2 FROM MY_TABLE GROUP BY COLUMNID