1. 程式人生 > >Sqlserver 多條記錄合併 轉載整理

Sqlserver 多條記錄合併 轉載整理

--1

create table T1 (UserID int , UserName nvarchar(50),CityName nvarchar(50));
insert into T1 (UserID,UserName,CityName) values (1,'a','上海')
insert into T1 (UserID,UserName,CityName) values (2,'b','北京')
insert into T1 (UserID,UserName,CityName) values (3,'c','上海')
insert into T1 (UserID,UserName,CityName) values (4,'d','北京')
insert into T1 (UserID,UserName,CityName) values (5,'e','上海')
go

CREATE FUNCTION dbo.f_str(@id nvarchar(50))
RETURNS nvarchar(4000)
AS
BEGIN
    DECLARE @r nvarchar (4000)
    SET @r=''
    SELECT @

[email protected]+','+ UserName FROM T1 WHERE [email protected]
    RETURN STUFF(@r, 1, 1, '')
END
GO
-- 呼叫函式
SELECt CityName, value = dbo.f_str(CityName) FROM T1 GROUP BY CityName
drop table T1
drop function dbo.f_str

--2

create table T1 (UserID int , UserName nvarchar(50),CityName nvarchar(50));
insert into T1 (UserID,UserName,CityName) values (1,'a','上海')
insert into T1 (UserID,UserName,CityName) values (2,'b','北京')
insert into T1 (UserID,UserName,CityName) values (3,'c','上海')
insert into T1 (UserID,UserName,CityName) values (4,'d','北京')
insert into T1 (UserID,UserName,CityName) values (5,'e','上海')
go
create function f_hb (@id nvarchar(50))
returns varchar(8000)
as
begin
  declare @str varchar(8000)
  set @str=''
  select @str= @str+','+cast(UserName as varchar) from T1 where CityName

[email protected]
  set @str=right(@str , len(@str) -1)
  return(@str)
End
go

--呼叫自定義函式得到結果:
select distinct CityName ,dbo.f_hb(CityName) as value from T1
drop table T1
drop function dbo.f_hb

--3

DECLARE @T1 table(UserID int , UserName nvarchar(50),CityName nvarchar(50));
insert into @T1 (UserID,UserName,CityName) values (1,'a','上海')
insert into @T1 (UserID,UserName,CityName) values (2,'b','北京')
insert into @T1 (UserID,UserName,CityName) values (3,'c','上海')
insert into @T1 (UserID,UserName,CityName) values (4,'d','北京')
insert into @T1 (UserID,UserName,CityName) values (5,'e','上海')

SELECT B.CityName,UserList FROM (
SELECT CityName,
   UserList=stuff((SELECT ','+UserName FROM @T1 WHERE CityName=A.CityName  FOR XML PATH('')), 1 , 1 , '')  
FROM @T1 A
GROUP BY CityName
) B

--4

create table T1 (UserID int , UserName nvarchar(50),CityName nvarchar(50));
insert into T1 (UserID,UserName,CityName) values (1,'a','上海')
insert into T1 (UserID,UserName,CityName) values (2,'b','北京')
insert into T1 (UserID,UserName,CityName) values (3,'c','上海')
insert into T1 (UserID,UserName,CityName) values (4,'d','北京')
insert into T1 (UserID,UserName,CityName) values (5,'e','上海')

-- 查詢處理
SELECT * FROM(SELECT DISTINCT CityName FROM T1) A 
OUTER APPLY(
        SELECT[value]=STUFF(REPLACE(REPLACE(
            (
                SELECT UserName FROM T1 N
                WHERE N.CityName = A.CityName
                FOR XML AUTO
            ), '<N UserName="', ','), '"/>', ''), 1, 1, '')
)n


相關推薦

Sqlserver 記錄合併 轉載整理

--1 create table T1 (UserID int , UserName nvarchar(50),CityName nvarchar(50)); insert into T1 (UserID,UserName,CityName) values (1,'a','

Mysql之一對查詢,如何將記錄合併成一記錄

資料庫環境:mysql5.6 需求描述(圖1): 最終期望的結果(圖2): 如上圖所示,現有兩張表cj_lottery_winning_record和cj_lottery_winning_user_info 兩者的關係是一對多。 現在進行連線查

關於oracle記錄合併為一記錄的方法

今天正還有同學問了一個問題,怎麼把兩條不同的記錄合併成一條記錄從資料庫裡面拿出來,oracle資料庫。 拿到之後首先想的是,分兩條sql語句去查,然後在程式裡做拼接。經過溝通發現,同學的需求不是這個樣子的,是要求一條sql語句獲取兩條記錄併合並他們,資料庫學的

DB2同一欄位字元記錄合併

DB2將多行記錄合併成一行如:CREATE TABLE LX_TMP1(ID VARCHAR(100),OLDNAME VARCHAR(100));INSERT INTO LX_TMP1 VALUES('LUYONG','A');INSERT INTO LX_TMP1 VAL

SQL 拼接個字段的值&一個字段記錄的拼接

cells body score 完成 整數 數據類型 pad 參數 需要 如student表: studentID studentName studentScore 01 Alice 90

sql語句update 記錄

key mysq ech tle date class spl imp set UPDATE categories SET display_order = CASE id WHEN 1 THEN 3 WHEN 2 THEN 4 WHEN 3 THEN 5 END

oracle Insert 一次插入記錄

pan rac ora 方法 tab where ble code 兩種方法 oracle Insert 一次插入多條記錄有兩種方法: 1)Insert All Into table_name values ... insert all into table_name v

mysql 根據某個字段將記錄的某個字段拼接成一個字段

ESS 令行 ike ice 多條 value 新增 shel 情況 1 問題 GROUP_CONCAT函數用於將多個字符串連接成一個字符串,在拼接成字符串時就會存在拼接長度的問題,mysql 默認的拼接最大長度為1024 個字節,由於1024個字節會出現不夠用的情況,所以

mysql 批量更新與批量更新記錄的不同值實現方法

批量更新 mysql更新語句很簡單,更新一條資料的某個欄位,一般這樣寫: UPDATE mytable SET myfield = 'value' WHERE other_field = 'other_value';   如果更新同一欄位為同一個值,mysql也很簡單,修改

執行一sql語句update記錄實現思路

如果你想更新多行資料,並且每行記錄的各欄位值都是各不一樣,你會怎麼辦呢?本文以一個示例向大家講解下如何實現如標題所示的情況,有此需求的朋友可以瞭解下       通常情況下,我們會使用以下SQL語句來更新欄位值: 複製程式碼 程式碼如下: UP

Groovy程式碼優化-記錄合成

最近有一個需求,分享活動領取詳情的顯示,由於領取記錄中狀態為‘支出’的記錄都是由領取狀態為‘已入賬’轉化過來的,所以需要將這種狀態的記錄虛化成兩條記錄,一條是‘已入賬’的狀態,另一條則是‘支出’的狀態,另外,對於同一天的狀態為‘支出’的資料進行整合,捏造成一條資料,然後再按照時間排序,而

Laravel一次更新記錄,批量更新的方法

在我們實際應用中,免不了這樣的情況——例如我們同時錄入多條資訊,可能三條五條還好說,但量一旦變大,就會增加讀寫資料庫的次數,會降低效率,那麼,我們該如何實現,做到一次讀寫資料庫,批量更新呢? 例如這種情況: HTML程式碼: <!doctype html> &l

將包含分號的欄位值拆分成記錄

將包含分號的欄位值拆分成多條記錄   xx,yy,zz三個欄位中的內容如果分號分隔的個數相同(以xx欄位為基準),則按先後順序拆分記錄,如果分號分隔的個數與xx欄位不同的,則按xx欄位的分隔的個數拆分記錄,與其個數不等的原樣不變 drop table #aagocr

laravel批量更新記錄

建立資料模型 <?php namespace App\Models; use DB; use Illuminate\Database\Eloquent\Model; /** * demo表模型 */ class Demo extends Model {

mybatis 實現批量更新 更新記錄個欄位為不同的值

更新多條記錄為多個欄位為不同的值 比較普通的寫法,是通過迴圈,依次執行update語句。 Mybatis寫法如下: <update id="updateBatch" parameterType="java.util.List"> <foreach coll

mybatis 返回 map 一記錄

一  返回一條記錄的map 1. mapper.xml 中 resultType="map"  <select id="getEmpByIdReturnMap" resultType="map">          select * from employee

使用JDBC一次插入記錄(以MySQL為例)

閱讀本文需要的先修知識: 最基本的SQL語句 最基本的JDBC操作(如插入單條記錄) 如急需使用請直接看最後一段程式碼。 在JDBC中,插入記錄最簡單的方法是使用executeUpdate()方法,但該方法中的引數只能是單條SQL語句,其實對於需要INSERT或者UPDA

Mysql根據指定指定字元拆分某個欄位,分割成記錄(去重複)

1.如圖 2.sql SELECT DISTINCT substring_index( substring_index( a.device_id, ',', b.help_topic_id + 1 ), ',',- 1 ) NAME FROM tb_tabrec

GROUP_CONCAT,SUBSTRING_INDEX的妙用(將資料合併成一行,並且根據某些列的合併值做條件判斷來生成最終值)

(1)不做處理: SELECT e.class_id AS class_id, c.course_name AS class_name, u.stuNum AS stu_num, u.USER_NAME AS student_name, u.department AS depart

mysql left join 記錄 1:n 的處理方法

一、準備兩張表,文章表和評倫表 CREATE TABLE `article` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT 'ID', `title` varchar(255) DEFAULT '' COMMENT '文章標