Powershell, 488
-

    0..11|%{'On the {0} day of christmas my true love gave to me {1}'-f(
            (
                'first',
                'second',
                'third',
                'fourth',
                'fifth',
                'sixth',
                'seventh',
                'eighth',
                'ninth',
                'tenth',
                'eleventh',
                'twelveth'
            )[$_],
            ($_..0|% {
                  (
                    'a partridge in a pear tree',
                    'two turtle doves and',
                    'three french hens',
                    'four calling birds',
                    'five golden rings',
                    'Six geese-a-laying',
                    'Seven swans-a-swimming',
                    'Eight maids-a-milking',
                    'Nine ladies dancing',
                    'Ten lords-a-leaping',
                    'Eleven pipers piping',
                    'Twelve drummers drumming'
                 )[$_]
               }|out-string)
           )
          }


There's nothing particularly clever here, it's just two nested loops.

I had originally included a switching statement to get the "and" on the partridge for all but the first verse. 

But, because the question absolves us of punctuation, we can just append the "and" to the doves.

This results in line feeds as follows:

    On the first day of christmas my true love gave to me a partridge in a pear tree
    
    On the second day of christmas my true love gave to me two turtle doves and
    a partridge in a pear tree
    
    On the third day of christmas my true love gave to me three french hens
    two turtle doves and
    a partridge in a pear tree