sql - 有没有更好的方法来使用相同的源表构建表
问题描述
这段代码有效,但我想知道是否有更好的方法来做到这一点?对于每个 Select 语句,我从同一个源中提取并最终尝试从具有多行(EAV 样式)的表移动到类似条目的列中。这是目前表格结构方式的图像: 当前表格结构 这是我想要结束的图像: 尝试创建的新结构
SELECT * FROM
(SELECT
t1.a,
t1.b,
t1.c As c1,
t2.d AS d2,
t2.c As c2
FROM
(SELECT [Code],
[DBName].[dbo].[Spec].SpecItem_Code,
[DBName].[dbo].[SpecItem].Name,
[DBName].[dbo].[Spec].SpecValue
FROM [DBName].[dbo].[Vehicle]
LEFT JOIN [DBName].[dbo].[Spec] ON [DBName].[dbo].[Vehicle].Code=[DBName].[dbo].[Spec].Code
LEFT JOIN [DBName].[dbo].[SpecItem] ON [DBName].[dbo].[SpecItem].[Code] = [DBName].[dbo].[Spec].[SpecItem_Code]
WHERE
[DBName].[dbo].[SpecItem].Name LIKE '%test1%') t1
FULL OUTER JOIN
(SELECT
[DBName].[dbo].[Vehicle].[Code],
[DBName].[dbo].[Spec].SpecItem_Code,
[DBName].[dbo].[SpecItem].Name,
[DBName].[dbo].[Spec].SpecValue
FROM [DBName].[dbo].[Vehicle]
LEFT JOIN [DBName].[dbo].[Spec] ON [DBName].[dbo].[Vehicle].Code=[DBName].[dbo].[Spec].Code
LEFT JOIN [DBName].[dbo].[SpecItem] ON [DBName].[dbo].[SpecItem].[Code] = [DBName].[dbo].[Spec].[SpecItem_Code]
WHERE
[DBName].[dbo].[SpecItem].Name LIKE '%test2%') t2
ON t1.Code = t2.Code) t12
FULL OUTER JOIN
(SELECT
[DBName].[dbo].[Vehicle].[Code],
[DBName].[dbo].[Spec].SpecItem_Code,
[DBName].[dbo].[SpecItem].Name,
[DBName].[dbo].[Spec].SpecValue
FROM [DBName].[dbo].[Vehicle]
LEFT JOIN [DBName].[dbo].[Spec] ON [DBName].[dbo].[Vehicle].Code=[DBName].[dbo].[Spec].Code
LEFT JOIN [DBName].[dbo].[SpecItem] ON [DBName].[dbo].[SpecItem].[Code] = [DBName].[dbo].[Spec].[SpecItem_Code]
WHERE
[DBName].[dbo].[SpecItem].Name LIKE '%test3%') t3
ON t12.Code = t3.Code
解决方案
推荐阅读
- java - 无法设置正确的文件路径
- google-cloud-platform - 如何在 Google Cloud Function 上使用 Node.js 按名称返回整个 Datastore 表
- c# - 具有参数是类的属性的类型
- java - getItemViewType 仅在 onBindViewHolder 中返回,而不在 onCreateViewHolder 中返回
- netsuite - SuiteScript AddButton 未向其他用户显示
- angular - 将两个元素设置为相同的高度
- python - 读取目录中以某个字符串开头的所有文件
- identityserver4 - SilentRenewService._tokenExpiring:signinSilent 出错:帧窗口超时 t.error
- javascript - vis.js在删除单个节点时删除整个图
- r - 在r中转换向量和矩阵之间相关性的最快方法是什么?