Sql server 2008 如何在SQL中连接两行并根据列进行排序
我有一张像上面这样的桌子。我想写一个查询,这样我就有了一个如下表:Sql server 2008 如何在SQL中连接两行并根据列进行排序,sql-server-2008,Sql Server 2008,我有一张像上面这样的桌子。我想写一个查询,这样我就有了一个如下表: comp vol Volume ID Seg name CSQ 9000 15000 ANSD-09-MN-02 EWW a CSY 11000 15000 ANSD-09-MN-02 EWW a CCB 0.020679 15 ANSD-09-W1-02 CID W CID 0.868951 15
comp vol Volume ID Seg name
CSQ 9000 15000 ANSD-09-MN-02 EWW a
CSY 11000 15000 ANSD-09-MN-02 EWW a
CCB 0.020679 15 ANSD-09-W1-02 CID W
CID 0.868951 15 ANSD-09-W1-02 CID W
CSQ 9.919137 15 ANSD-09-W1-02 CID W
CSY 4.139181 15 ANSD-09-W1-02 CID W
我没有一个名为crucomp
的列,crucomp中的数据是特定ID的卷和组成的串联
我尝试了不同的方法来达到预期的结果,但我无法达到预期的结果
我需要帮助。
谢谢
MS SQL Server 2014架构设置:
Volume BatchID Seg Name Crucomp
15000 ANSD-09-MN-02 EWW a (CSQ-9000)(CSY-11000)
15000 ANSD-09-W1-02 CID W (CCB-0.020679)(CID-0.868951)(CSQ-9.919137 )(CSY-4.139181).
DECLARE @TABLE TABLE(comp VARCHAR(20), vol VARCHAR(10), Volume INT,
ID VARCHAR(20), Seg VARCHAR(10),name VARCHAR(10))
INSERT INTO @TABLE VALUES
('CSQ' , '9000' , 15000 ,'ANSD-09-MN-02','EWW','a'),
('CSY' , '11000' , 15000 ,'ANSD-09-MN-02','EWW','a'),
('CCB' , '0.020679', 15 ,'ANSD-09-W1-02','CID','W'),
('CID' , '0.868951', 15 ,'ANSD-09-W1-02','CID','W'),
('CSQ' , '9.919137', 15 ,'ANSD-09-W1-02','CID','W'),
('CSY' , '4.139181', 15 ,'ANSD-09-W1-02','CID','W')
SELECT t.Volume
,t.ID AS BatchID
,t.Seg
,t.name
,STUFF((SELECT '(' + comp + '-'+ Vol + ')'
FROM @TABLE
WHERE Volume = t.Volume AND Seg = t.Seg
AND ID = t.ID AND name = t.name
FOR XML PATH(''),TYPE).value('.','NVARCHAR(MAX)'),1,0,'') AS Crucomp
FROM @TABLE t
GROUP BY t.Volume
,t.ID
,t.Seg
,t.name
ORDER BY t.Volume DESC
查询1:
Volume BatchID Seg Name Crucomp
15000 ANSD-09-MN-02 EWW a (CSQ-9000)(CSY-11000)
15000 ANSD-09-W1-02 CID W (CCB-0.020679)(CID-0.868951)(CSQ-9.919137 )(CSY-4.139181).
DECLARE @TABLE TABLE(comp VARCHAR(20), vol VARCHAR(10), Volume INT,
ID VARCHAR(20), Seg VARCHAR(10),name VARCHAR(10))
INSERT INTO @TABLE VALUES
('CSQ' , '9000' , 15000 ,'ANSD-09-MN-02','EWW','a'),
('CSY' , '11000' , 15000 ,'ANSD-09-MN-02','EWW','a'),
('CCB' , '0.020679', 15 ,'ANSD-09-W1-02','CID','W'),
('CID' , '0.868951', 15 ,'ANSD-09-W1-02','CID','W'),
('CSQ' , '9.919137', 15 ,'ANSD-09-W1-02','CID','W'),
('CSY' , '4.139181', 15 ,'ANSD-09-W1-02','CID','W')
SELECT t.Volume
,t.ID AS BatchID
,t.Seg
,t.name
,STUFF((SELECT '(' + comp + '-'+ Vol + ')'
FROM @TABLE
WHERE Volume = t.Volume AND Seg = t.Seg
AND ID = t.ID AND name = t.name
FOR XML PATH(''),TYPE).value('.','NVARCHAR(MAX)'),1,0,'') AS Crucomp
FROM @TABLE t
GROUP BY t.Volume
,t.ID
,t.Seg
,t.name
ORDER BY t.Volume DESC
:
Volume BatchID Seg Name Crucomp
15000 ANSD-09-MN-02 EWW a (CSQ-9000)(CSY-11000)
15000 ANSD-09-W1-02 CID W (CCB-0.020679)(CID-0.868951)(CSQ-9.919137 )(CSY-4.139181).
DECLARE @TABLE TABLE(comp VARCHAR(20), vol VARCHAR(10), Volume INT,
ID VARCHAR(20), Seg VARCHAR(10),name VARCHAR(10))
INSERT INTO @TABLE VALUES
('CSQ' , '9000' , 15000 ,'ANSD-09-MN-02','EWW','a'),
('CSY' , '11000' , 15000 ,'ANSD-09-MN-02','EWW','a'),
('CCB' , '0.020679', 15 ,'ANSD-09-W1-02','CID','W'),
('CID' , '0.868951', 15 ,'ANSD-09-W1-02','CID','W'),
('CSQ' , '9.919137', 15 ,'ANSD-09-W1-02','CID','W'),
('CSY' , '4.139181', 15 ,'ANSD-09-W1-02','CID','W')
SELECT t.Volume
,t.ID AS BatchID
,t.Seg
,t.name
,STUFF((SELECT '(' + comp + '-'+ Vol + ')'
FROM @TABLE
WHERE Volume = t.Volume AND Seg = t.Seg
AND ID = t.ID AND name = t.name
FOR XML PATH(''),TYPE).value('.','NVARCHAR(MAX)'),1,0,'') AS Crucomp
FROM @TABLE t
GROUP BY t.Volume
,t.ID
,t.Seg
,t.name
ORDER BY t.Volume DESC
你能描述一下你尝试了什么以及它是如何不起作用的吗?我使用了这个select@crucomp=coalesce(@crucomp,“)+”(“+composition+”-“+convert(varchar,volume)+”)“从PAS_BATCH_SEG_COMP_VOLUMES print@crucomp……它提供了所有合成和体积的串联。我想知道如何为单独的ID断开该结果”“hanks..工作正常。