我是sql服务器的新手,我在过去几天一直在尝试将Access中的简单TRANSFORM查询转换为SQL Server。
在访问中,查询如下所示:
TRANSFORM tblDefHolidays.colDate
SELECT tblDefHolidays.colDate
FROM tblDefHolidays
WHERE tblDefHolidays.colDate >= DateAdd ("d", -60, date())
AND tblDefHolidays.colDate <= DateAdd ("yyyy",2, date())
GROUP BY tblDefHolidays.colDate
ORDER BY tblDefHolidays.colCal DESC
PIVOT tblDefHolidays.colCal;
在SQL Server中,表tblDefHolidays定义如下:
colCal nvarchar(40)
colDate date
colCodeBB nvarchar(20)
colDesc nvarchar(255)
这是我当前未运行的SQL Server查询。
SELECT colDate, colCal
FROM
(
SELECT dbo.tblDefHolidays.colDate, dbo.tblDefHolidays.colCal
FROM dbInv.dbo.tblDefHolidays) as [subTable]
PIVOT
( max(colDate)
FOR dbInv.dbo.tblDefHolidays.colCal
IN ([OSAKA],[LIFFE],[HKEX],[EUREX],[CME],[CBOE])
) as [pivotTable]
当运行当前的sql server查询时,我得到:
Msg 107,Level 15,State 1,Line 9列前缀 'dbInv.dbo.tblDefHolidays'与表名或别名不匹配 查询中使用的名称。消息207,级别16,状态1,行2无效 列名'colDate'。
结果(来自Access)应如下所示:
colDate OSAKA LIFFE HKEX EUREX CME CBOE
7/1/2014 7/1/2014
7/4/2014 7/4/2014 7/4/2014
7/21/2014 7/21/2014
8/25/2014 8/25/2014
9/1/2014 9/1/2014 9/1/2014
9/9/2014 9/9/2014
9/15/2014 9/15/2014
9/23/2014 9/23/2014
10/1/2014 10/1/2014
感谢阅读。
最佳,
Manu
答案 0 :(得分:1)
请尝试以下方法。在SourceTable子查询之后,您不应再通过dbInv.dbo.tblDefHolidays引用字段,别名SourceTable接管
SELECT
[OSAKA]
, [LIFFE]
, [HKEX]
, [EUREX]
, [CME]
, [CBOE]
FROM (
SELECT
dbo.tblDefHolidays.colDate
, dbo.tblDefHolidays.colCal
FROM dbInv.dbo.tblDefHolidays
) AS SourceTable
PIVOT
(
MAX(colDate)
FOR colCal IN ([OSAKA], [LIFFE], [HKEX], [EUREX], [CME], [CBOE])
) AS PivotTable
;
尝试使用冗余列的变体(不要生气,技术上多余)
SELECT
displayDt
, [OSAKA]
, [LIFFE]
, [HKEX]
, [EUREX]
, [CME]
, [CBOE]
FROM (
SELECT
convert(varchar,dbo.tblDefHolidays.colDate,101) as displayDt
, dbo.tblDefHolidays.colDate
, dbo.tblDefHolidays.colCal
FROM dbInv.dbo.tblDefHolidays
) AS SourceTable
PIVOT
(
MAX(colDate)
FOR colCal IN ([OSAKA], [LIFFE], [HKEX], [EUREX], [CME], [CBOE])
) AS PivotTable
ORDER BY
displayDt
;
我已经猜到该日期栏的MM / DD / YYYY样式101。
您应该能够添加引用select子句中的字段的order by子句 见:BOL
没有命名列(OSAKA,LIFFE等)没有办法构建查询 在Access中可能没有必要这样做,这里有。