2011-12-15 11 views
0

複数の行を1行に連結するビューを作成する必要があります。SQL連結ビュー

問題のテーブルはQotMasterであり、LineType = '6'のNCommentフィールドからすべての行を結合する必要があり、見積もりの​​下にそれらをグループ化してQuoteフィールドでグループ化すると推測します。連結する各行には、Lineというフィールドがあり、2から始まり、引用符コメントの行数に応じて増加します。

最終的に私が読んで、単一のラインが欲しい:

Quote   NComment 
00202300  Lines for quotes all listed one after the other starting at 2 and so on 

すべてのヘルプは大幅にapreciatedされるだろう。 Iveは下記の連結が必要なセクションをダンプしようとしました。 SQL Serverでは

Quote Line LineType DefaultEntry ProductClass TaxCode FedSalesTax MStockCode MDescription MWarehouse MUom MDecimals MLineShipDate MCusStockCode MCusRetailPrice MMass MVolume MUserField1 NComment NCommentFromLin NCommentType NCommentTextTyp NSrvIncTotal NSrvSummary NSrvChargeType NSrvParentLine NSrvQtyFactor NSrvApplyFactor NSrvDecimalRnd NSrvDecRndFlag NSrvMinValue NSrvMaxValue NSrvMulDiv NPrtOnInv NPrtOnDel NPrtOnAck NPrtOnQuote NCommentFlag1 NCommentFlag2 NCommentFlag3 NCommentFlag4 NCommentFlag5 NCommentFlag6 NCommentPoJob TimeStamp Version Release SalesOrderLine MBomFlag MParentKitType MQtyPer MScrapPercentage MPrintComponent MComponentSeq MOptionalFlag Estimate ConfirmedFlag 
00202300 1 7 0 M20    002023000000001     Periodic inspection & test  **  0 2012-01-13 00:00:00.000         0.00000 0.000000 0.000000               0      0 0.000000  0  0.00 0.00      0 0 0 0 0 0  0x000000002414E6EE   0   0.000000 0.00 N        
00202300 2 6 0                       0 NULL         0.00000 0.000000 0.000000   Pre-Formed Windings, Sheffield     0 N     0 0.000000  0  0.00 0.00     Y 1 0 0 0 0 0  0x000000002414E6C0   0   0.000000 0.00         
00202300 3 6 0                       0 NULL         0.00000 0.000000 0.000000   To carry out a periodic inspection and test  0 N     0 0.000000  0  0.00 0.00     Y 1 0 0 0 0 0  0x000000002414E6C1   0   0.000000 0.00         
00202300 4 6 0                       0 NULL         0.00000 0.000000 0.000000   of the fixed wiring installation. This will 0 N     0 0.000000  0  0.00 0.00     Y 1 0 0 0 0 0  0x000000002414E6C2   0   0.000000 0.00         
00202300 5 6 0                       0 NULL         0.00000 0.000000 0.000000   consist of 100% inspection and 10% testing,  0 N     0 0.000000  0  0.00 0.00     Y 1 0 0 0 0 0  0x000000002414E6C3   0   0.000000 0.00         
00202300 6 6 0                       0 NULL         0.00000 0.000000 0.000000   based on previous records being available.  0 N     0 0.000000  0  0.00 0.00     Y 1 0 0 0 0 0  0x000000002414E6C4   0   0.000000 0.00         
00202300 7 6 0                       0 NULL         0.00000 0.000000 0.000000   The price is based on no serious defects  0 N     0 0.000000  0  0.00 0.00     Y 1 0 0 0 0 0  0x000000002414E6C5   0   0.000000 0.00         
00202300 8 6 0                       0 NULL         0.00000 0.000000 0.000000   being found, which may result in the testing 0 N     0 0.000000  0  0.00 0.00     Y 1 0 0 0 0 0  0x000000002414E6C6   0   0.000000 0.00         
00202300 9 6 0                       0 NULL         0.00000 0.000000 0.000000   being expanded to cover 25%, which would  0 N     0 0.000000  0  0.00 0.00     Y 1 0 0 0 0 0  0x000000002414E6C7   0   0.000000 0.00         
00202300 10 6 0                       0 NULL         0.00000 0.000000 0.000000   incur additional costs. A full report will  0 N     0 0.000000  0  0.00 0.00     Y 1 0 0 0 0 0  0x000000002414E6C8   0   0.000000 0.00         
00202300 11 6 0                       0 NULL         0.00000 0.000000 0.000000   be issued upon completion.      0 N     0 0.000000  0  0.00 0.00     Y 1 0 0 0 0 0  0x000000002414E6C9   0   0.000000 0.00         
+2

だから、何を試してもうまくいかないのですか?それともあなたのためにそれをやってくれる人がいると思いますか? –

+0

どのRDBMSを使用していますか? –

+0

@ItayMoavあなたが見ることができるように、まさにSQLのエキスパートではありません。私は空白を描いた線をどのように連結するかを見て、それをやる方法のアドバイスの直後でした。 – lewiscooksey

答えて

0

は、あなただけのこれらの線に沿って何かをする関数を作成する必要があるだろう:

CREATE FUNCTION [dbo].[mergeComments](@quote NVARCHAR(8)) 
RETURNS nvarchar(max) 
AS 
BEGIN 

DECLARE @comment nvarchar(max) 
DECLARE @delimiter nvarchar(2) 

SET @delimiter = ', ' 
SET @comment = '' 

SELECT @comment = @comment + ISNULL(NComment,'')[email protected] 
FROM QotMaster 
WHERE Quote = @quote AND Line > 1 

SET @comment = substring(@comment,1,len(@comment)-LEN(@delimiter)) 

RETURN @comment 

END 

次に、あなたのビュー

SELECT Quote, dbo.mergeComments(Quote) NQuote 
FROM (SELECT DISTINCT Quote FROM QotMaster) 
の線に沿って何かを持っているだけでしょう

これはちょうど私の頭の上から外れているので、おそらくもっと良い方法があります。