0

我在 SQL Server 2008 中有两个临时表

表 1,results_types

------------
| Result_1 |
| Result_2 |
| Result_3 |
| Result_N |
------------

表 2,all_results

--------------------
| Run_A | Result_1 |
| Run_A | Result_2 |
| Run_B | Result_3 |
| Run_B | Result_3 |
| Run_B | Result_3 |
| Run_B | Result_3 |
| Run_C | Result_2 |
--------------------

如何进行查询以返回摘要,该摘要计算 *results_types* 中的每个条目,而无需遍历 *results_types*。提前致谢

-----------------------------------------------------
| 'Run' | Result_1 | Result_2 | Result_3 | Result_N |
-----------------------------------------------------
| Run_A | 1        | 2        | 0        | 0        |
| Run_B | 0        | 0        | 4        | 0        |
| Run_C | 0        | 2        | 0        | 0        |
-----------------------------------------------------
4

1 回答 1

2

您可以使用 SQL-server Pivot 函数和动态 SQL:

DECLARE @Cols NVARCHAR(MAX) = STUFF((   SELECT  ',' + Result_Type
                                        FROM    Result_Types
                                        FOR XML PATH(''), TYPE
                                    ).value('.', 'NVARCHAR(MAX)'), 1, 1, '');

DECLARE @SQL NVARCHAR(MAX) = '  SELECT  *
                                FROM    all_results
                                        PIVOT
                                        (   COUNT(Result_Type)
                                            FOR Result_Type IN (' + @Cols + ')
                                        ) pvt;'
EXECUTE SP_EXECUTESQL @SQL;

SQL Fiddle 示例

于 2013-06-13T12:34:10.060 回答