繁体   English   中英

用于将行转换为列的 SQL 选择查询

[英]SQL Select Query for Converting rows to Columns

我有两个表,一个表将包含主记录,另一个表将包含该主表的详细信息。 我需要如下所示的输出。

表格1:

身份证件说明
1 个样品
2 样本 1

表 2:

ID Table1Id 区块日期 SampleCollected
1 1 C 24/09/2020 5
2 1 天 24/09/2020 4
3 2 C 24/09/2020 7
4 2 天 24/09/2020 6
5 1 C 25/09/2020 2
6 2 天 25/09/2020 8

我需要如下所示的输出

24/09/2020 24/09/2020 25/09/2020 25/09/2020 ......
C D C D ……
样品 5 4 2 0 ……..
样品 1 7 6 0 8 ……..


请帮我解决这个查询。

您可以使用PIVOT将行转换为列。 MS SQL Server 的官方文档

请在此小提琴中找到解决您问题的可能方法。

你的想法会导致很多列。 解决方案可能是使用您的Sample列进行旋转。 cte正在保存视图以使用table1的样本描述。 PIVOT基于样本。 CASE WHEN用于带零而不是NULL

WITH cte AS (SELECT table2.ID, table1.Description, table2.Block, table2.DateBlock, table2.SampleCollected
FROM table2
JOIN table1
ON table2.SampleID = table1.ID)
SELECT Block, DateBlock,
  CASE WHEN [Sample] IS NULL THEN 0 ELSE [Sample] END AS Sample, 
  CASE WHEN [Sample1] IS NULL THEN 0 ELSE [Sample1] END AS Sample1
FROM (
SELECT *
FROM cte) AS sourcetable
PIVOT  
(  
SUM(SampleCollected)  
FOR Description IN ([Sample], [Sample1])  
) AS PivotTable
ORDER BY DateBlock, Block;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM