Sql-Server中的交叉表以特定方式打印 [英] Cross tab in Sql-Server to print specific manner

查看:102
本文介绍了Sql-Server中的交叉表以特定方式打印的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在SQL中需要帮助



我在这样的表中有记录



Need Help In SQL

I have records in table like this

ID	 	Customer	OrderDat                Remarks
1		ABC		2007-01-01 		aaaaaaaaaa
2		ABC		2007-01-02 		bbbbbbbbbb
3		ABC		2007-01-03  	        cccccccccccc
4		DEF		2007-01-02 		dddddddddd







我想在Crystal Report中打印记录如下:






I want to print Record in Crystal Report like this :

OrderID	 Customer Date1     Remark1	    Date2	      Remark2     Date3 	   Remark3
1	ABC     2007-01-01	 aaaaaaaaa  2007-01-02 bbbbbbbbbb  2007-01-03    ccccccc
2	DEF     2007-01-02 dddddddddd    -	        -   	-	    -



先谢谢你..


Thanks in Advance..

推荐答案

您需要使用类似于下面的查询作为Crystal Report的来源:

You need to use query similar to below one as a source of Crystal Report:
DECLARE @customers TABLE (ID INT IDENTITY(1,1), Customer VARCHAR(30), OrderDat DATETIME, Remarks VARCHAR(300))

INSERT INTO @customers (Customer, OrderDat, Remarks)
VALUES('ABC', '2007-01-01', 'aaaaaaaaaa'),
('ABC', '2007-01-02', 'bbbbbbbbbb'),
('ABC', '2007-01-03', 'cccccccccccc'),
('DEF', '2007-01-02', 'dddddddddd')


SELECT T1.Customer, T1.[1] AS Date1,  T2.[1] AS Remarks1, T1.[2] AS Date2, T2.[2] AS Remarks2, T1.[3] AS Date3, T2.[3]  AS Remarks3
FROM (
    SELECT Customer, [1], [2], [3]
    FROM (
        SELECT Customer, CONVERT(VARCHAR(10),OrderDat,121) AS OrderDat, ROW_NUMBER() OVER(PARTITION BY Customer ORDER BY OrderDat) AS EventID
        FROM @customers
    ) AS DT1
    PIVOT(MAX(OrderDat) FOR EventID IN([1], [2], [3])) AS PT1) AS T1
    INNER JOIN (
        SELECT Customer, [1], [2], [3]
        FROM (
        SELECT Customer, Remarks, ROW_NUMBER() OVER(PARTITION BY Customer ORDER BY OrderDat) AS EventID
        FROM @customers
        ) AS DT2
        PIVOT(MAX(Remarks) FOR EventID IN([1], [2], [3])) AS PT2) AS T2
    ON T1.Customer = T2.Customer





结果:



Result:

ABC	2007-01-01	aaaaaaaaaa	2007-01-02	bbbbbbbbbb	2007-01-03	cccccccccccc
DEF	2007-01-02	dddddddddd	NULL	NULL	NULL	NULL





但是我需要警告你:这是无效的非 - 优雅的方式!



But i need to warn you: This is ineffective and non-elegant way!


这篇关于Sql-Server中的交叉表以特定方式打印的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆