根据选择查询中的行选择动态列

时间:2018-04-30 10:27:11

标签: sql sql-server dynamic-sql

数据结构如下

Table 1:

Col1a   Col1b   Col1c   Col1d
-----------------------------
 d11a    d11b    d11c    d11d
 d12a    d12b    d12c    d12d

Table 2:

Col2a   Col2b   Col2c   Col2d   Col2e
-----------------------------------
 s21a    s21b    s21c   Col1b   SUM(Col1b)
 s22a    s22b    s22c   Col1c   SUM(Col1c)
 s23a    s23b    s23c   Col1c   SUM(Col1c)
 s24a    s23b    s23c   Col1d   SUM(Col1d)

你可以看到我需要做什么。 现在' Col2e '现在是空的,我需要根据'Col2d'中的单元格数据更新它。

注意:两个表都没有任何标识列。

我尝试使用函数,在select查询中进行复制,但由于无法动态选择列,因此无法使用。 我找不到使用Exec / Exec sp_executesql选择/更新的方法。

任何建议都将受到赞赏。

编辑: 我未来的下表可能会用于映射

Table ColumnMapping:

ColRowData  ColActualName   ColInTable
-----------------------------
 QTDCol  janQtd  Col1b
 FYCol   janFY   Col1c

这就是为什么我希望我的列选择是动态的。

2 个答案:

答案 0 :(得分:3)

这是你需要的吗?

// parse from input strings
LocalDateTime start = LocalDateTime.parse(startText, FORMATTER);
LocalDateTime end = LocalDateTime.parse(endText, FORMATTER);

boolean nightTime = 
        !start.toLocalDate().equals(end.toLocalDate())
        || start.toLocalTime().isBefore(START_TIME)
        || end.toLocalTime().isAfter(END_TIME);

// todo: change output to gui
System.out.println("night time: " + nightTime);
System.out.println("duration  : " + Duration.between(start, end).toHours());

答案 1 :(得分:2)

如果我理解你的问题,那么下面的查询应该适合你。

update t2 
    set Col2e = (select case 
                        when t1.col1b = t2.col1b then Sum(col1b) 
                        when t1.col1c = t2.col1c then Sum(col1c) 
                        else Sum(col1d) 
                    end 
            from   table1 t1) 
from   table2 t2