在SQL中将列转换为具有联接表的行

时间:2017-03-26 17:23:20

标签: sql-server grouping rows transpose

我有以下结构:

    public void changePhoto()
    {
        int MyPhoto;
        if (edit.Text != string.Empty)
        {
            try
            {
                MyPhoto = (int)typeof(Resource.Drawable).GetField(edit.Text).GetValue(null);
            }
            catch
            {
                MyPhoto = Resource.Drawable.ErrorPhoto;
            }
            img.SetImageResource(MyPhoto);
        }
    }
    button.Click += delegate 
    {
        changePhoto();
    }; 

我一直在努力转换以下查询,而不是选择我想将它们转换为行的列

WordTemplatesByAssemblyPackage
[PackageId] [TemplateId]

WordTemplate
[TemplateId] [Name]

WordTemplatePlainDataMappings
[TemplateId] [UDF01SdtTag] [UDF02SdtTag] [UDF03SdtTag] ... [UDF20SdtTag]

WordTemplateTableDataMappings
[TemplateId] [TableContainerSdtTag] [Col01SdtTag] [Col02SdtTag] ... [Col10SdtTag]

我一直在尝试使用unpiv,但我得到的只是

SELECT
t.Name,
pd.UDF01SdtTag,
pd.UDF02SdtTag,
pd.UDF03SdtTag,
tpd.TableContainerSdtTag,
tpd.Col01SdtTag,
tpd.Col02SdtTag,
tpd.Col03SdtTag

FROM
doc.WordTemplatesByAssemblyPackage AS p
INNER JOIN doc.WordTemplate AS t ON p.TemplateId = t.TemplateId AND p.TemplateId = t.TemplateId
LEFT JOIN doc.WordTemplatePlainDataMappings AS pd ON pd.TemplateId = t.TemplateId AND pd.TemplateId = t.TemplateId
LEFT JOIN doc.WordTemplateTableDataMappings AS tpd ON tpd.TemplateId = t.TemplateId AND tpd.TemplateId = t.TemplateId
WHERE
p.PackageId = 3

最后,我想要实现的结果是这样的:

42000 - [SQL Server]The column 'TemplateId' was specified multiple times for 'unpiv'.
42000 - [SQL Server]The multi-part identifier "p.TemplateId" could not be bound.

1 个答案:

答案 0 :(得分:0)