2017-03-03 53 views
3

如何寫一個查詢,以便不包括每個列名table1的用逗號 分開的每一列如何編寫一個查詢,而無需指定每個列名由逗號分隔每個柱分離

+------+-----+-----------+-------------+ 
| eno |dno | ename  | job_type | 
+------+-----+-----------+-------------+ 
| 101 | 1 | sam  | manager  | 
| 102 | 2 | ash  | teacher  | 
| 103 | 3 | rohan  | clerk  | 
| 104 | 4 | sohan  | peon  | 
| 105 | 5 | mohan  | guar  | 
+------+-----+------------+------------+ 

我要輸出這樣

101,1,sam,manager  
102,2,ash,teacher 

和休息一樣

+0

我刪除了MySQL的標籤。請僅使用您真正使用的數據庫進行標記。 –

+0

我認爲在SQL Server中執行此操作的唯一方法是使用動態SQL。 –

回答

2

與交叉的幫助下適用(或兩個),一個小XML和東西()

注意的一點是:這種方法將排除NULL值

Declare @YourTable table (eno int,dno int, ename varchar(25),job_type varchar(25)) 
Insert Into @YourTable values 
(101,1,'sam' , 'manager'), 
(102,2,'ash' , 'teacher'), 
(103,3,'rohan', 'clerk' ), 
(104,4,'sohan', 'peon' ), 
(105,5,'mohan', 'guar' ) 


Select C.* 
From @YourTable A 
Cross Apply (Select XMLData=cast((Select A.* for XML Raw) as xml)) B 
Cross Apply ( 
       Select String=Stuff((Select ',' +Value 
        From (
         Select Value = attr.value('.','varchar(max)') 
         From XMLData.nodes('/row') as A(r) 
         Cross Apply A.r.nodes('./@*') AS B(attr) 
         ) X 
        For XML Path ('')),1,1,'') 
      ) C 

返回

String 
101,1,sam,manager 
102,2,ash,teacher 
103,3,rohan,clerk 
104,4,sohan,peon 
105,5,mohan,guar 
+0

太棒了...但第一個記錄像這樣1,101,經理,山姆 – manderson

+1

@manderson糾正。我刪除了改變順序的區別 –

0

您也可以使用動態SQL查詢做到這一點。

查詢

declare @sql as varchar(max); 

select @sql = 'select case when right(t.csv, 1) = ' + char(39) + ',' + char(39) 
      + ' then left(t.csv, len(t.csv) - 1) else t.csv end as csv from(select ' 

      + stuff((select '+ case when [' + column_name + '] is null then ' 
      + char(39) + char(39) + 
     ' else cast([' + column_name + '] as varchar(max)) + ' 
      + char(39) + ',' + char(39) + ' end' 
      from information_schema.columns 
      where table_name = 'dds_emp' 
      order by ordinal_position asc 
      for xml path('') 
     ), 1, 1, ''); 

select @sql += ' as csv from dds_emp)t;'; 
exec(@sql); 
相關問題