2011-05-04 20 views
0

我有一個表BillData這樣的:SQL到在多發性行組數據在單個字段

Column Data Type 
BilNo  INT 
SlNo  INT 
Rate  FLOAT 
Weight  FLOAT 
Type  VARCHAR(2) 

有這樣的示例數據:

BilNo SlNo Rate Weight Type 
10001 1 1000.00 3.231 GM 
10001 2 1200.00 2.354 GM 
10001 3 1300.00 1.891 CT 
10002 1 900.00 5.458 GM 
10003 1 1450.00 9.520 GM 
10003 2 1100.00 6.352 GM 

我需要球杆重量和速率分爲單列(Rate Weight)和按照BilNo分組,並提交如下報告:

Bill No Data            Type 
10001 1000.00 3.231 1200.00 2.354 1300.00 1.891 GM GM CT 
10002 900.00 4.454          GM 
10003 1450.00 9.520 1100 6.352       GM GM 

請幫我一個請點擊此處。

+0

如果你使用'GROUP_CONCAT'功能,您可以只實現它幾行代碼。見下文。 – Andrew 2011-05-04 08:19:30

回答

2

您可以group by上BilNo和使用子查詢與for xml來連接RateWeightType

select 
    B.BilNo as [Bill No], 
    (select cast(Rate as varchar(10))+' '+cast([Weight] as varchar(10))+' ' 
    from BillData as B2 
    where B.BilNo = B2.BilNo 
    for xml path(''), type).value('.[1]', 'varchar(max)') as Data, 
    (select [Type]+' ' 
    from BillData as B2 
    where B.BilNo = B2.BilNo 
    for xml path(''), type).value('.[1]', 'varchar(max)') as [Type] 
from BillData as B 
group by B.BilNo 
+0

非常感謝。這簡直太棒了。 – Nagesh 2011-05-04 08:08:51

0

可以使用GROUP_CONCAT函數與GROUP BY命令工作。

SELECT BillNo, 
GROUP_CONCAT(Rate, ' ', Weight SEPARATOR ' ') AS DATA, 
GROUP_CONCAT(TYPE SEPARATOR ' ') AS TYPE 
FROM BillData 
GROUP BY BillNo; 

編輯
這工作得很好,我在MySQL 53年5月1日。你沒有指定,所以也許你正在使用不同的數據庫引擎。這是表格創建代碼。你可以剪切和過去吧,以及上面的SQL語法:

 
CREATE TABLE BillData (
    BillNo int(11) DEFAULT NULL, 
    SlNo int(11) DEFAULT NULL, 
    Rate float DEFAULT NULL, 
    Weight float DEFAULT NULL, 
    Type varchar(2) DEFAULT NULL 
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
LOCK TABLES BillData WRITE; /*!40000 ALTER TABLE BillData DISABLE KEYS /; INSERT INTO BillData (BillNo,SlNo,Rate,Weight,Type) VALUES (10001,1,1000,3.321,'GM'), (10001,2,1200,2.354,'GM'), (10001,3,1300,1.891,'CT'), (10002,1,900,5.458,'GM'), (10003,1,1450,9.52,'GM'), (10003,2,1100,6.352,'GM');
/
!40000 ALTER TABLE BillData ENABLE KEYS */; UNLOCK TABLES;

而且我從查詢結果:


10001 1000 3.321 1200 2.354 1300 1.891 GM GM CT 
10002 900 5.458         GM 
10003 1450 9.52 1100 6.352     GM GM 
+0

對不起,這是行不通的 – Nagesh 2011-05-04 10:45:01

+0

再次檢查。在MySQL中適用於我。見上面的編輯。 – Andrew 2011-06-29 01:51:46

相關問題