两天前我问过如何在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
这可能是一个简单的方法吗?我只需要UPDATE
否INSERT
,因为禁止使用新行。
现在我没有为我的会员上课。我使用以下代码在C#中加载DataGridView
:
BindingSource bsMember = new BindingSource();
bsMember.DataSource = DBMember.Get();
dgv.DataSource = bsMember;
DBMember.Get()
返回使用上面显示的SQL代码生成的DataTable
。
对不起,除了循环遍历每一行,我没办法:/
编辑:由于我的SQL代码中的JOIN
,所提供的副本很难让我遵循。我可以在更新时加入吗?
请考虑直接帮助我。