C# 两个SQL查询的交替列
我有一个oracle查询,它从两个不同的表中获取数据,显示为:C# 两个SQL查询的交替列,c#,sql,asp.net,oracle,C#,Sql,Asp.net,Oracle,我有一个oracle查询,它从两个不同的表中获取数据,显示为: Project | 20151 | 20152 | 20153 | 20154 | Project_1 | 20151_1 | 20152_1 | 20153_1 | 20154_1 ------------------------------------------------------------------------------------------- 这确实得到了我所需要的正确数据,但是我需要一种从每个表中交替列的方
Project | 20151 | 20152 | 20153 | 20154 | Project_1 | 20151_1 | 20152_1 | 20153_1 | 20154_1
-------------------------------------------------------------------------------------------
这确实得到了我所需要的正确数据,但是我需要一种从每个表中交替列的方法。例如:
Project | Project_1 | 20151 | 20151_1 | ...
---------------------------------------
我的问题如下:
SELECT * FROM(
SELECT * FROM
(
SELECT planned.YEAR || planned.MONTH as AAA, planned.DAYS as Amount, PROJ.NAME AS Project
FROM PLANNED_RESOURCE_TAB planned, USER_LINK_VIEW PROJ
WHERE ACTUAL.U_P_LINK = PROJ.ID
AND PROJ.USER_ID = '1'
)
PIVOT
(
SUM(Amount) FOR AAA in (20151,20152,20153,20154)
)
)
PLANNED__ RIGHT OUTER JOIN
(
SELECT * FROM
(
SELECT ACTUAL.YEAR || ACTUAL.MONTH as BBB, ACTUAL.DAYS as Amount, PROJ.NAME AS Project
FROM ACTUAL_RESOURCE_TAB actual, USER_LINK_VIEW PROJ
WHERE ACTUAL.U_P_LINK = PROJ.ID
AND PROJ.USER_ID = '1'
)
PIVOT
(
SUM(Amount) FOR BBB in (20151,20152,20153,20154)
)
)ACTUAL__
ON PLANNED__.PROJECT = ACTUAL__.PROJECT
数据结果将显示在ASP.NET页面上,因此,如果最好操作页面本身上的列,这没有问题。我主要想知道是否有可能事先用SQL完成这项工作,然后我将如何进行这项工作
列不能在第一个select语句中声明,它们将根据用户的输入而变化。pivot中的值仅用于我的测试目的,它们将从ASP.NET页面动态生成
提前谢谢 您是否尝试将
*
替换为最外部选择的检索列?大概是这样的:
SELECT PLANNED__.Project,
ACTUAL__.Project,
PLANNED__."20151",
ACTUAL__."20151",
PLANNED__."20152",
ACTUAL__."20152",
PLANNED__."20153",
ACTUAL__."20153",
PLANNED__."20154",
ACTUAL__."20154"
FROM
(SELECT *
FROM
(SELECT planned.YEAR
|| planned.MONTH AS AAA,
planned.DAYS AS Amount,
PROJ.NAME AS Project
FROM PLANNED_RESOURCE_TAB planned,
USER_LINK_VIEW PROJ
WHERE ACTUAL.U_P_LINK = PROJ.ID
AND PROJ.USER_ID = '1'
) PIVOT ( SUM(Amount) FOR AAA IN (20151,20152,20153,20154) )
) PLANNED__
RIGHT OUTER JOIN
(SELECT *
FROM
(SELECT ACTUAL.YEAR
|| ACTUAL.MONTH AS BBB,
ACTUAL.DAYS AS Amount,
PROJ.NAME AS Project
FROM ACTUAL_RESOURCE_TAB actual,
USER_LINK_VIEW PROJ
WHERE ACTUAL.U_P_LINK = PROJ.ID
AND PROJ.USER_ID = '1'
) PIVOT ( SUM(Amount) FOR BBB IN (20151,20152,20153,20154) )
)ACTUAL__
ON PLANNED__.PROJECT = ACTUAL__.PROJECT
它应该在页面上。SQL并不是真正为数据表示而设计的,只是为数据查询而设计的。在演示层进行演示。这很有意义,感谢您的反馈。这纯粹是为了维护工作的结构,还是实际上也是为了优化工作?好吧,目的不是为了“优化性能”(在某些情况下它有帮助,在某些情况下它会伤害,而在另一些情况下它并不重要)。这一切都是关于在合适的地方做事情——如果你发现你需要一个性能关键的优化,你总是可以打破所有的模式(以某种合理的方式)。例如,如果演示文稿(或BL)只需要返回字符串的前10个字符,那么让DB只返回字符串的前10个字符是完全合法的,但在SQL中格式化日期时间值或使用UI标题命名列是没有意义的。这确实给出了我想要的确切结构,但问题是,这些列将发生变化。它们表示日期,因此,例如,如果用户希望查看2014年6月至2014年12月之间的数据,则列必须是20146、20147等。我想我可以使用C#构建查询字符串,并以这种方式有效地创建答案。。。谢谢你!