1. 程式人生 > >SQL 多行轉成一列

SQL 多行轉成一列

CREATE TABLE [dbo].[a]
(
[id] [nchar] (10) COLLATE Chinese_PRC_CI_AS NULL,
[name] [nchar] (10) COLLATE Chinese_PRC_CI_AS NULL,
[value] [nchar] (10) COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY]
GO
--建立表




INSERT INTO dbo.a
        ( id, name, value )
VALUES  ( N'1', -- id - nchar(10)
          N'張三', -- name - nchar(10)
          N'1'  -- value - nchar(10)
          ),
          ( N'2', -- id - nchar(10)
          N'張三', -- name - nchar(10)
          N'2'  -- value - nchar(10)
          ),
          ( N'3', -- id - nchar(10)
          N'李四 ', -- name - nchar(10)
          N'1'  -- value - nchar(10)
          ),
          ( N'4', -- id - nchar(10)
          N'李四', -- name - nchar(10)
          N'2'  -- value - nchar(10)
          ),
          ( N'5', -- id - nchar(10)
          N'王五', -- name - nchar(10)
          N'1'  -- value - nchar(10)
          ),
          ( N'6', -- id - nchar(10)
          N'王五', -- name - nchar(10)
          N'2'  -- value - nchar(10)
          )
          --插入例子資料
          
          
          
SELECT * FROM  a 
--查詢表


SELECT rTRIM(a.value)+','   FROM a  FOR XML PATH('') 

--把value列拼接起來,隔開




SELECT b.name,
(SELECT rTRIM(value)+','  FROM a WHERE name=b.name FOR XML PATH('')) AS valuenew FROM dbo.a AS b  GROUP BY name

--按照name分組,計算當前name的value值的拼接






SELECT name,LEFT(valuenew,LEN(valuenew)-1)as valuenew,LEN(LEFT(valuenew,LEN(valuenew)-1)) as valuenewlen,LEN(a.valuenew)AS 原長度 FROM (
SELECT b.name,
(SELECT rTRIM(value)+','  FROM a WHERE name=b.name FOR XML PATH('')) AS valuenew FROM dbo.a AS b  GROUP BY name )  a
--left方法保留字串的長度減一的字串
--或
SELECT name,STUFF(a.valuenew,LEN(a.valuenew),1,'') as valuenew ,LEN(STUFF(a.valuenew,LEN(a.valuenew),1,'')) as valuenewlen,LEN(a.valuenew)AS 原長度 FROM (
SELECT b.name,
(SELECT rTRIM(value)+','  FROM a WHERE name=b.name FOR XML PATH('')) AS valuenew FROM dbo.a AS b GROUP BY name)  a 
--stuff方法把字串最後一位開始,第一字元刪除,插入空

--去除拼接的最後一個字元逗號























相關推薦

SQL

CREATE TABLE [dbo].[a]([id] [nchar] (10) COLLATE Chinese_PRC_CI_AS NULL,[name] [nchar] (10) COLLATE Chinese_PRC_CI_AS NULL,[value] [nchar]

SQL Server 轉行。

一、多行轉成一列(並以","隔開)表名:A表資料:想要的查詢結果:查詢語句:SELECT name , value = ( STUFF(( SELECT ',' + value FROM A

oracle (轉行)、

1.多列轉成一列(列轉行) --6列轉成兩列(列轉行) 這就是最常見的列轉行,主要原理是利用SQL裡面的union with temp as  (select    a.iid_sn,    a.product_name,    a.sales_figures,    a

oracle資料庫把某資料資料

select running_time, running_user, algorithm_id, algorithm_list_id, name1, name2, ROWNUM, wm_concat(t

SQL

表內容: 姓名 課程 分數 張三 語文 74張三 數學 83張三 物理 93張三 德語 null李四 語文 74李四 數學 84李四 物理 94李四 英語 80想變成(得到如下結果): 姓名 語文 數學 物理 英語 德語---- ---- ---- ----李四 74   

sql拼接字串

舉個例子: 產品表:ID,productname,CompanyInfo_id; 1 aaa 1 2 bbb

sqlserver把說明資料

sqlserver中可以對庫說明、表說明、表的列說明,這些說明起到註釋的作用。 有天同事問到如何把列說明變成一個欄位轉成表的資料,就不用那麼麻煩每次去改表了。 在資料庫中可以這樣查 先在shiyan1資料庫中 EXEC [shiyan1].sys.sp_addextende

sql一行字串

方法1: DECLARE @STR VARCHAR(8000) SELECT @STR = ISNULL(@STR+',','')+CAST(MenuID AS NVARCHAR) FROM (SEL

postgresql 9.3 自定義聚合函式實現資料合併

前言 常見的一種需求,如下圖(1): 目前需要按右邊的factor_code進行分組,將左邊的behavior_code這一列通過指定分隔符連線起來,比如通過<br /> 來連線,理想的效果應當是如下圖(2)這樣: 下面就來討論一下實現

MSSQL將資料拼接

select e_uid, base_no = (stuff((select ';' + base_no from e_baseuid where e_uid = a.e_uid for xml path('')),1,1,'')), e_usetype = (stuff((

資料庫一行

如題: select max(case when name='1' then [temp] else null end) as temp1 , max(case when name='2' t

oracle

select t.rank, t.Name from t_menu_item t;     10 CLARK     10 KING     10 MILLER     20 ADAMS     20 FORD     20 JONES     20 SCOTT     2

SQL 字符串,隔開

char varchar XML arch normal logs sql log 字符串 select stuff((select ‘,‘+ CONVERT(VARCHAR(50),lateminute) from T_Attendance_Abnormal WHER

sql(PIVOT)與轉行(UNPIVOT)

列轉行 gif 而且 碼農 實現 score username info rect 在做數據統計的時候,行轉列,列轉行是經常碰到的問題。case when方式太麻煩了,而且可擴展性不強,可以使用 PIVOT,UNPIVOT比較快速實現行轉列,列轉行,而且可擴展性強

sql service 操作

ice pack 通過 group by img ora _id select package 通過行換列處理之後: SELECT s.AREA_NAME, max(CASE s.TYPE WHEN ‘CPU‘ THEN s.PRICE ELSE 0 end)CPU,

SQL Server 轉行

結果 name pre toolbar des null 表名 再次 arch 一、多行轉成一列(並以","隔開) 表名:A 表數據: 想要的查詢結果: 查詢語句: SELECT name , value = ( STUFF(( SELECT

oracle

問題描述:    應公司要求,設計功能,一個ID,對應不同的值,展示的時候不同的值拼接展示,如何實現;   解決思路:     1) 拼接字串,想到了 oracle  Function(),這樣肯定能實現,但是比較麻煩;

excel技能集1-科學計數法正常顯示+文字指標匯合指標

如何使自動顯示為科學記數法數字文字轉化為顯示文字型別 選中目標行 選擇【分列】  點選下一步 直到可以選擇【列資料格式】那步 修改選項為文字 點選完成 如何把多列指標粘合成一列指標(批量匯入sql時用到的傻瓜方法) 使用phonetic函式 把N行M列

單純的將資料怎麼實現(急急急)

已解決一個web登入系統的如何訪問資料庫 innobackupex備份mysql速度如何? 求助一個mysql儲存過程的問題51 已解決mysqlcluster關於管理節點的問題 匭鼐uth茸陀儼http://baoba

查詢每個學生每門課程的成績,sql server實現

本人經常寫sql server指令碼,有時需要行轉列,這裡做個筆記。 練習指令碼 -- 學生表 CREATE TABLE student ( stuid VARCHAR(16) NOT NULL, stunm VARCHAR(20) NOT NULL, PRI