2

私を助けることができるAccessの第一人者はいますか?次のことを実現する方法を見つけようとしています。個人のテーブル内の各個人を調べて、クリスマスリストフィールドに真の値を持つ個人を返すクエリが必要です。このデータベースは古く、CompanyNameを会社のテーブルの主キーとして作成されました(私は知っています-悪いデザインです)。複数の場所を持つ会社を持つことを回避するために、彼らはアドレスラインフィールドを作成しました。そうすれば、「Company y」がサンディエゴに新しい場所を開く場合、「Company Y-San Diego」のエントリを追加し、アドレス行に「CompanyY」と入力します。次に、会社を持たない個人の場合、「ホーム」のダミー会社エントリに入力されます。したがって、理想的には、このクエリで実行したいのは、ループスルーすることです。クリスマスリストに載っているはずのすべての個人を取得します。アドレス行フィールドがISN'TNULLの場合、CompanyNameをAddressLineと等しくしますが、CompanyName = "Home"の場合、CompanyNameを ""(空の文字列)と等しくします。また、通常の住所は私書箱であるため、夜間の住所を持っている人もいます。以下のクエリは私がほとんど私のために働いていますが、CompanyName = "Home"の場合、返される結果で会社名を空白にする方法がわかりません。

SELECT tblIndividuals.FirstName, tblIndividuals.LastName, IIf([tblcompanies].[addressline] Is Not Null,[tblcompanies].[addressline],[tblcompanies].[companyname]) AS CompanyName, IIf([tblIndividuals].[MailingAddress1] Is Null,[tblCompanies].[MailingAddress1],[tblIndividuals].[MailingAddress1]) AS MailingAddress1, IIf([tblIndividuals].[MailingAddress1] Is Null,[tblCompanies].[MailingAddress2],[tblIndividuals].[MailingAddress2]) AS MailingAddress2, IIf([tblIndividuals].[MailingAddress1] Is Null,[tblCompanies].[MailingAddress3],[tblIndividuals].[MailingAddress3]) AS MailingAddress3, IIf([tblIndividuals].[MailingAddress1] Is Null,[tblCompanies].[MailingAddress4],[tblIndividuals].[MailingAddress4]) AS MailingAddress4, IIf([tblIndividuals].[MailingAddress1] Is Null,[tblCompanies].[City],[tblIndividuals].[City]) AS City, IIf([tblIndividuals].[MailingAddress1] Is Null,[tblCompanies].[State],[tblIndividuals].[State]) AS State, IIf([tblIndividuals].[MailingAddress1] Is Null,[tblCompanies].[Zip],[tblIndividuals].[Zip]) AS Zip
FROM tblIndividuals INNER JOIN tblCompanies ON tblIndividuals.CompanyName = tblCompanies.CompanyName
WHERE (((tblIndividuals.ChristmasList)=True))
Order by [tblIndividuals].[companyname];

可能であれば、CompanyName Values(AZ)で並べ替えてから、Individualの姓(AZ)で並べ替えてもらいたいと思います。私はSQLが得意なふりをするつもりはないので、あなたが私に与えることができるどんな助けでも大いに感謝されるでしょう。お時間をいただきありがとうございます。

4

1 に答える 1

2

UNIONクエリについて考えてみます。次に例を示します。

SELECT i.FirstName, i.LastName, 
       IIf(c.[addressline] Is Not Null,
           c.[addressline],c.[companyname]) AS CompanyName, 
       c.[MailingAddress1] AS MailingAddress1, 
       c.[MailingAddress2] AS MailingAddress2, 
       c.[MailingAddress3] AS MailingAddress3, 
       c.[MailingAddress4] AS MailingAddress4, 
       c.[City] AS City, 
       c.[State] AS State,
       c.[Zip] AS Zip
FROM tblIndividuals i
INNER JOIN tblCompanies c ON i.CompanyName = c.CompanyName
WHERE i.ChristmasList=True
AND i.[MailingAddress1] Is Null
UNION
SELECT i.FirstName, i.LastName, 
       IIf(c.[addressline] Is Not Null,c.[addressline],
           c.[companyname]) AS CompanyName, 
       i.[MailingAddress1] AS MailingAddress1, 
       i.[MailingAddress2] AS MailingAddress2, 
       i.[MailingAddress3] AS MailingAddress3, 
       i.[MailingAddress4] AS MailingAddress4, 
       i.[City] AS City, 
       i.[State] AS State,
       i.[Zip] AS Zip
FROM tblIndividuals i
INNER JOIN tblCompanies c ON i.CompanyName = c.CompanyName
WHERE i.ChristmasList=True
AND i.[MailingAddress1] Is Not Null

クエリを角かっこで囲んで、クエリデザインウィンドウを使用して並べ替えることができる派生テーブルを作成できます。

SELECT FirstName, LastName, etc 
FROM ( <union query> ) As q
Order by q.[companyname]
于 2012-06-19T22:37:38.433 に答える