【问题标题】:Sql query to fetch only few records from 1 column based on Condition and show/display it separately using Select querySql 查询根据 Condition 从 1 列中仅获取少量记录,并使用 Select 查询分别显示/显示
【发布时间】:2015-08-13 01:09:14
【问题描述】:

已编辑:

在我的数据库表中,我有 4 列 IDActionNameDateTime 以及以下记录:

Action         Name      DateTime
-------------------------------------
Submit         AA        'date time'
Update         BB        'date time'
Save           CC        'date time'
Match          DD        'date time'
Submit         EE        'date time'
Submit         FF        'date time'
Update         GG        'date time'
Approve        HH        'date time'
Approve        II        'date time'
Update         JJ        'date time'
Match          KK        'date time'
Save           LL        'date time'
Match          MM        'date time'
etc                      'date time'
etc                      'date time'

这些记录可以重复多次。

我想从上面的表中选择具有 Action = Submit 和 Action = Update 的 Name 和 DateTime;使用选择查询分成两个单独的列(就像我们使用选择查询获取数据一样)。

查询示例:

SELECT 
    Name as SubmitterName, DateTime AS SubmitterDateTime
FROM 
    [tbl_WorkflowHistory]
WHERE 
    Action = 'Submit' 

SELECT 
    Name as UpdateName, DateTime AS  UpdateDateTime
FROM 
    [tbl_WorkflowHistory]
WHERE 
    Action = 'Update'

唯一的事情是我想同时显示两个查询的记录,但在 4 个单独的列中,如下格式:

需要输出:

SubmitName    SubmitDateTime    UpdateName    UpdateDateTime
-------------------------------------------------------------
    AA        'datetime'          BB          'datetime' 
    EE        'datetime'          GG          'datetime'
    FF        'datetime'          JJ          'datetime'
    etc                           etc

在“SubmitName”列下,所有名称都应具有 Action=Submit 以及 SubmitDateTime 列中的相应 DateTime。同样,在“UpdateName”列下,所有具有 Action=Update 的 Names 以及 UpdateDateTime 列中的相应 DateTime 都会出现。我不知道如何编写此查询,它只是解释我的要求的示例。

在选择上面输出的记录后,使用 sql 查询,我必须在 RadGrid 中显示它,其中“SubmitDateTime”列中的数据必须在 RadGrid 的 2 个不同列中单独显示(日期分开,时间分开),即,提交日期,提交时间。同样对于“UpdateDateTime”,即 UpdateDate、UpdateTime;如下所述:

SubmitAction    SubmitDate    SubmitTime    UpdateAction    UpdateDate    UpdateTime
------------------------------------------------------------------------------------ 
Submit          'date'        'time'        Update          'date'        'time'
Submit          'date'        'time'        Update          'date'        'time'
Submit          'date'        'time'        Update          'date'        'time'
etc                                      

我希望我已经明确了我的要求。请让我知道如何做到这一点。我正在使用 SQL Server 数据库。请回复。提前致谢

【问题讨论】:

  • (1) 您使用的是什么数据库?请适当地标记问题。 (2) 你的问题是什么?您似乎想要某种支点,但我不明白输入数据与所需结果之间的关系。
  • 我认为您的示例数据不完整,我认为您错过了某种 id。
  • @GordonLinoff:感谢您的回复。我正在使用 SQL Server 数据库。是的,第一列是 ID(自动生成)列,第二个动作和第三个日期时间。在“动作”栏中,记录了动作。现在,通过查询,我想获取 2 个不同的“操作”,即提交和更新;与日期一起分成两个单独的列。与 Action=Submit 一样,我想将所有“提交”操作提取到名为“SubmitAction”的列中,并将它们各自的日期和时间放在另一列中。对于 Action=Update 也是如此。请回复如何实现。

标签: sql asp.net sql-server radgrid


【解决方案1】:

根据我的要求,以下查询可以正常工作:

 Select * FROM
 ( 
 SELECT RequestID, Action, UserName as SubmitterName , CreatedDate AS  SubmitterDateTime
 FROM [tbl_WorkflowHistory]
 Where Action = 'Submit') as A

 Join

 (SELECT RequestID, Action, UserName as UpdateName , CreatedDate AS  UpdateDateTime
 FROM [tbl_WorkflowHistory]
 Where Action = 'Update') as B 

 ON A.RequestID=B.RequestID

感谢大家的回复和帮助。

【讨论】:

    【解决方案2】:

    如果 DateTime 列中的数据是空格分隔的,那么您可以这样做:

    INSERT INTO TABLE_2(SubmitAction,SubmitDate,SubmitTime)
    SELECT Action,left(DateTime,locate(' ',DateTime)-1),substr(DateTime,locate(' ',DateTime)+1) FROM TABLE_1;  
    

    如果我正确理解了您的问题,它应该可以工作。如果您需要其他内容,请详细说明您的问题。谢谢

    【讨论】:

    • 感谢您的回复。但我不想插入数据。我只想从具有 3 列的表中选择数据:ID、Action、DateTime(此表的结构在我发布的问题中定义)现在我想选择 Action = Submit 和 Action = Update 以及 DateTime 到两个单独的列中(就像我们使用选择查询获取数据一样)。
    • 示例: *Select Action as SubmitAction, DateTime as SubmitDateTime , Action as UpdateActon DateTime, DateTime as UpdateDateTime from Table1 where Action='Submit' and Action='Update' * .在“SubmitAction”列下,所有 Action=Submit 都应与 SubmitDateTime 中的相应 DateTime 一起出现。同样,在“UpdateActon”列下,所有 Action=Update 都应与 UpdateDateTime 中的相应 DateTime 一起出现。我不知道如何编写此查询,它只是解释我的要求的示例。
    • 在选择了上述记录后,我必须在 RadGrid 中显示它,其中“SubmitDateTime”列中的数据必须显示在 RadGrid 的 2 个不同列中,即 SubmitDate、SubmitTime。同样对于“UpdateDateTime”数据。我希望我的要求很明确。请回复
    • 试试这个:SELECT Action,left(DateTime,locate(' ',DateTime)-1),substr(DateTime,locate(' ',DateTime)+1) FROM TABLE_1 WHERE Action = "Submit"; 同样对于更新更改“WHERE Action = “Submit””到“WHERE Action = “Update””希望这会奏效。是的,现在问题很清楚了。谢谢你的解释。
    • 感谢您的回复。我再次更新了我发布的问题,请看一下。当我尝试您建议的解决方案时,我收到此错误:'locate' is not a recognized built-in function name. 请回复
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-04
    • 2014-03-26
    • 1970-01-01
    • 2016-04-05
    • 2015-07-06
    相关资源
    最近更新 更多