【问题标题】:Write an SQL query selecting data from filtered Date columns编写一个 SQL 查询,从过滤的日期列中选择数据
【发布时间】:2016-11-01 03:17:47
【问题描述】:

我正在尝试在 Access 中查询交叉表/记录集(在 excel 表上尝试过 ADO),其中列中有日期,例如

如果我想提取仅包含 2014 年列的有限数据,我该如何编写这样的查询?请注意,这些列可能会有所不同。

【问题讨论】:

  • 在 SQL 中使用 where 子句,where year(dtInspectDate)=2014
  • 这些列的结束日期也为 2014、2015、2016。如果我只想将列限制在某个特定年份,那么我该如何使用 sql 查询呢?我试着做你的建议,但没有得到任何结果。如果你有一个这样的表,你能给我一个例子,说明 sql 查询应该如何只提取某些年份列吗? ps:我不知道日期可能是什么。
  • select * from data where year(data.dtDate)=2014
  • 所以我按照你说的那样尝试了,但是得到了参数文本框:SELECT * FROM Data WHERE YEAR (REPLACE(Data.["Week Ending " & "*" ],"Week Ending ","" ,1))=2014 出了什么问题?
  • year([Week Ending])=2014 是 Week Ending 是您在表格中的字段名称吗?

标签: sql excel vba ms-access crosstab


【解决方案1】:

类似这样,不过可能有更简单的方法

Sub Akward_Query()

Dim strSQL As String
Dim strSQL2 As String
Dim rst As ADODB.Recordset
Dim fld As ADODB.Field
Dim intYear As Integer

intYear = 2014

strSQL = "Select top 1 * from tbl_Test"

Set rst = New ADODB.Recordset

rst.Open strSQL, CurrentProject.Connection, 1

strSQL2 = "Select "

For Each fld In rst.Fields

    If InStr(1, fld.Name, "Week Ending") > 0 And InStr(1, fld.Name, intYear)>0 Then

        strSQL2 = strSQL2 & "[" & fld.Name & "],"

    End If

Next fld

If Right(strSQL2, 1) = "," Then strSQL2 = Left(strSQL2, Len(strSQL2) - 1)

strSQL2 = strSQL2 & " from tbl_Test"

End Sub

【讨论】:

  • 这很酷。但是是否没有可以在此交叉表上编写的 SQL 查询来获取有限的日期列?展开交叉表不是一种替代方法,因为有 1008 行并且有 165 个这样的日期列,即取消透视后,行变为 165 * 1008 = 166320 行。另外我不得不将其更改为因为它没有检测到年份:如果 InStr(1, fld.Name, "Week Ending") > 0 And Right(fld.Name, 2) = Right(intYear, 2) Then.. ...
  • 您可以将枢轴线添加到我创建的 SQL 中。所以选择 x,y,z 然后你可以做枢轴位,你需要自己做一些:)
  • 最初的想法是将表数据限制为仅包含特定年份的少数日期列。然后在显示为列标题的 ACV 值上再次转换此记录集,计算每个唯一项目在一行中每个 ACV 值(NA、0、1、2、3 等,在这些日期列下找到)的第一次出现在第一列。我被这个困境困住了很长一段时间。如果您能帮助我解决这个问题,我将不胜感激。如果没有,我仍然要感谢您的所有帮助。 :)
猜你喜欢
  • 2023-03-29
  • 1970-01-01
  • 2023-01-27
  • 2021-07-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-31
  • 1970-01-01
相关资源
最近更新 更多