SQL Server:枢轴后更新(需要unpivot?)

时间:2016-05-30 09:46:16

标签: sql sql-server sql-update pivot unpivot

两天前我问过如何在SQL中使用pivot来转置表。

在你的帮助下我做对了,这里的解决方案是:SQL server: Transpose Rows to Columns (n:m relationship)

我正在运行SQL Server 2012,使用OBDC连接,使用C#进行编程。

所以现在我有:

| mitID | Name   | FamName | DOB        | abtIDref | HV            | PEV        | Drive      | Nex        |
|-------|--------|---------|------------|----------|---------------|------------|------------|------------|
| 1     | Frank  | Sinatra | 12.12.1915 | 1        | **30.5.2016** |            | 05.06.2015 | 02.11.2015 |
| 2     | Robert | Downey  | 4.4.1965   | 2        | 27.7.2014     | 01.01.2016 | 20.01.2015 |            |

我通过以下SQL语句得到了这个:

DECLARE @sql AS NVARCHAR(MAX)
DECLARE @cols AS NVARCHAR(MAX)

SELECT @cols = ISNULL(@cols + ',', '') + QUOTENAME(Descr)
FROM Faehigkeiten ORDER BY faeID

SET @sql = N'
    SELECT mitID, Name, FamName, DOB, abtIDref, ' + @cols + '
    FROM(
       SELECT mitID, Name, FamName, DOB, abtIDref, [when], descr
       FROM Mitarbeiter m
       JOIN[Link - List] l ON m.mitID = l.mitIDref
       JOIN Faehigkeiten f ON f.faeID = l.feaIDref
    ) a
    PIVOT(MAX([when]) FOR descr IN(' + @cols + ')) p'

EXEC sp_executesql @sql

但是当我输入新的日期(上面显示为星号)或更改成员的名称时,如何保存数据?

我考虑过unpivot,但我不知道如何在我的情况下使用它。

我的解决方案是遍历所有行并将其与现有条目进行比较......但这可能需要很长时间才能有很多成员。

你能指出我的某个方向吗?UPDATE这可能是一个简单的方法吗?我只需要UPDATEINSERT,因为禁止使用新行。

现在我没有为我的会员上课。我使用以下代码在C#中加载DataGridView

BindingSource bsMember = new BindingSource();
bsMember.DataSource = DBMember.Get();
dgv.DataSource = bsMember;

DBMember.Get()返回使用上面显示的SQL代码生成的DataTable

对不起,除了循环遍历每一行,我没办法:/

编辑:由于我的SQL代码中的JOIN,所提供的副本很难让我遵循。我可以在更新时加入吗? 请考虑直接帮助我。

0 个答案:

没有答案