2016-01-22 92 views
0

我有这样一个表如何填充列的值,并且这么做的次数是QUANTITY的值。基于其他两个列的值

所以RESULT = FP_ID连接到自身QUANTITY次。

如果QUANTITY是3和FP_ID是23,则结果应该是232323

我需要做的是插入该结果基于该逻辑的每一行的插入件。

如何在SQL中执行此操作?

+0

为什么要在选择查询中计算它时存储它? 您不必要地存储冗余数据。 –

+0

其他存储过程依赖于预期有此数据的视图。为什么它是多余的? –

+0

没有必要存储数据,因为您可以随时计算它,同时在选择查询中检索它 –

回答

4

它应该是计算列....

我的意思是,因为它是基于其他两列

,如果你想创建表

ALTER TABLE tblResults 
ADD Final_Result as replicate(FP_ID ,Quantity) 

别人的后面添加我应该声明

而创作

Create table tblResults 
(.......ur columns..... , Final_Result as replicate(FP_ID ,Quantity)) 

你无需为此列提供数据,当数据加载到表格中时它会自动加载“tblResults”

注意:如果任何值为null,则Final_Result值也将为NULL

+0

谢谢koushik,这是我需要的。 –

0

我已经编辑我的回答如下:

请执行以下查询来创建Function

CREATE FUNCTION [dbo].[ConcatenateString] 
(
    @FP_ID INT, 
    @QUANTITY INT 
) 
RETURNS 
    NVARCHAR(MAX) 

AS 
BEGIN 
    DECLARE @ConcatenatedString NVARCHAR(MAX), @ConvertedFP_ID NVARCHAR(100) 
    SET @ConcatenatedString ='' 
    SET @ConvertedFP_ID = CONVERT(varchar(100),@FP_ID) 

    WHILE @QUANTITY >= 1 
     BEGIN 
      SELECT @ConcatenatedString = @[email protected]_ID 
      SET @QUANTITY = @QUANTITY - 1 
     END 

    RETURN @ConcatenatedString 
END 
GO 

而且你可以调用FunctionINSERT script

INSERT INTO tblResults(DEL_ID,CP_ID,ID,QUANTITY,FP_ID,RESULT) 
VALUES(1,2,3,4,5,(SELECT dbo.ConcatenateString(4,5) AS ConcatnatedValue)) 
+0

嗨,这将工作,如果我只是想要的数量乘以FP_ID的价值,但我需要的是_FP_ID_连接到自己_quantity_次。我会编辑我的问题,使其更清晰。 –

+0

谢谢Bala,这是否与replicate()相同? –

+0

@JackReilly,我的答案与replicate()不同。但是replicate()是最好的选择。我不知道复制,现在就学会了! –