Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    primarykey
    data
    text
    <p>Keep the database normalized.</p> <p>People:</p> <pre><code>(Id, Firstname, Lastname) </code></pre> <p>LastnameHistory: </p> <pre><code>(PeopleId, OldLastname, NewLastname, DateChanged) </code></pre> <p>You can the create a view which would be a "<a href="https://stackoverflow.com/q/451415/1114171"><code>GROUP_CONCAT</code></a>" type of query to transform the data as required.</p> <p>An example:</p> <pre><code>DECLARE @people TABLE ( id INT IDENTITY(1,1), fname VARCHAR(50), lname VARCHAR(50)) DECLARE @lnameHistory TABLE ( id INT IDENTITY(1,1), people_id INT, lname VARCHAR(50), date_changed DATETIME) INSERT INTO @people (fname, lname) VALUES ('john', 'smith'), ('jane', 'doe') INSERT INTO @lnameHistory (people_id, lname, date_changed) VALUES (2, 'shakespeare', '2012-01-01'), (2, 'einstein', '2013-12-12') ;WITH group_concat AS ( SELECT people_id, LEFT(lnames , LEN(lnames )-1) AS lnames FROM @lnameHistory AS o CROSS APPLY ( SELECT lname + ', ' FROM @lnameHistory AS i WHERE o.people_id = i.people_id ORDER BY date_changed ASC FOR XML PATH('') ) pre_trimmed (lnames) GROUP BY people_id, lnames ) SELECT p.*, gc.lnames FROM @people p JOIN group_concat gc ON gc.people_id = p.id </code></pre> <p>Some reference for syntax:</p> <ul> <li><a href="http://www.mssqltips.com/sqlservertip/1958/sql-server-cross-apply-and-outer-apply/" rel="nofollow noreferrer">SQL Server CROSS APPLY and OUTER APPLY</a></li> <li><a href="http://msdn.microsoft.com/en-us/library/bb522446.aspx" rel="nofollow noreferrer">XML Data (SQL Server)</a></li> </ul>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. VO
      singulars
      1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload