我正在尝试从第1行获取记录,然后将其插入第3行

时间:2019-07-23 10:50:04

标签: sql sql-server tsql sql-server-2016 crystal-reports-2008

我有一个名为RecordType的字段,其中包含三个不同的记录,1, 2, 3.每个都有不同的记录。我想从另一个我从LimitRecordType 1的字段中获取余额并将其插入RecordType 3中,但是我不确定如何执行此操作。这将进入Crystal Report,我希望能够完全取消RecordType 1

我尝试了一个简单的case语句,仅此而已,我真的想不出任何其他方法来做到这一点(我确定有很多工作要做)。

CASE
    WHEN FA.RecordType = 3 THEN
        FA.Limit
END AS LimitTest

当前结果

记录类型|限制

 1      | 5,000,301
 2      | 0
 3      | 0

预期结果

记录类型|限制

 2      | 0
 3      | 5,000,301

5 个答案:

答案 0 :(得分:0)

您似乎想将类型1和类型3的limit组合在一起。您可以对表达式进行聚合:

select (case when recordtype = 1 then 3 else recordtype end) as recordtype,
       sum(limit) as limit
from t
group by (case when recordtype = 1 then 3 else recordtype end);

答案 1 :(得分:0)

您可以尝试在选择语句中使用子查询和Case语句,例如:

SELECT [RecordType], 
    (CASE [RECORDTYPE] WHEN 3 THEN 
                        (SELECT LIMIT from Table_1 WHERE RECORDTYPE = 1) 
                    ELSE LIMIT END) LimitTest 
FROM TABLE_1 WHERE RECORDTYPE <> 1

答案 2 :(得分:0)

您说:

  

对不起,我的格式设置很糟糕,我不确定如何正确地进行格式化。但是要回答您的问题,类型1和3永远不会与3永远不会具有相同的值。我想基本上将值从类型1移到类型3

这让我认为这将是最简单的:

DELETE FROM table WHERE RecordType = 3
UPDATE table SET RecordType = 3 WHERE RecordType = 1

3永远没有值,所以让我们先摆脱它们,然后1拥有值,但我们希望它是3,所以只需将所有1都更新为3s

如果您不希望删除它,只需屏蔽它即可:

SELECT 3 as RecordType, Limit FROM table WHERE RecordType = 1

答案 3 :(得分:0)

如果要将值从类型1移到类型3,请在查询中进行简单的更新。

   update t set t.value= t1.value from table as t , table as t1 where t.recordtype=3 and t1.recordtype=1

   delete from table where recordtype = 3
   update recordtype set recordtype=1 where recordtype=3

这可能会起作用

答案 4 :(得分:0)

SELECT
    IIF(A.RECORDTYPE = 1,3,A.RECORDTYPE) AS RECORDTYPE,
    A.LIMIT
FROM
(
    SELECT 1 RECORDTYPE,5000301 LIMIT UNION ALL
    SELECT 2 RECORDTYPE,0 LIMIT UNION ALL
    SELECT 3 RECORDTYPE,0 LIMIT
) A
WHERE A.RECORDTYPE IN (1,2)
ORDER BY RECORDTYPE

检查是否适合您。